您好我是django serializers.Facing与POST序列化程序的小问题的新手。
models.py
class emp_shifts(models.Model):
emp_id = models.ForeignKey('emp_details')
emp_shift_id = models.ForeignKey('shift_master')
emp_weekdays = models.BooleanField()
emp_weekends = models.BooleanField()
emp_isactive = models.BooleanField()
class Meta:
db_table = 'emp_shifts'
views.py
@csrf_exempt
@api_view(['POST'])
def createEmpShift(request):
if request.method == 'POST':
data = request.data
serializer = empAllShiftsSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors)
serializers.py
class empListSerializer(serializers.ModelSerializer):
class Meta:
model = emp_details
#fields = '__all__'
exclude = ('emp_created_by','emp_created_time','emp_updated_by','emp_updated_time')
class allShiftsSerializer(serializers.ModelSerializer):
class Meta:
model = shift_master
fields = ('emp_shift_id','emp_shift_name','emp_shift_from','emp_shift_to')
class empAllShiftsSerializer(serializers.ModelSerializer):
emp_id = empListSerializer()
emp_shift_id = allShiftsSerializer()
class Meta:
model = emp_shifts
fields = '__all__'
我无法保存数据。 如果我发送
{
"emp_code":"R103AB",
"shift_name":"Morning Shift",
"emp_weekdays":1,
"emp_weekends":0,
"isactive":1
}
来自邮差的给出了错误
{
"emp_id": [
"This field is required."
],
"emp_shift_id": [
"This field is required."
]
}
我知道这里的问题。我需要从Foreignkey关系表中传递emp_id,emp_shift_id。 我能够获取emp_code主键和shift_name主键。但是如何将这两个值发送到
empAllShiftsSerializer()
这里成功发布数据。 如果我错了,请纠正我。
答案 0 :(得分:0)
我认为您需要覆盖empAllShiftsSerializer
序列化程序中的方法创建。
看看here
基本上,重写此方法可以定义您希望接收外部对象的pk,获取对象并添加您正在创建的对象。
示例:
class empAllShiftsSerializer(serializers.ModelSerializer):
emp_id = empListSerializer()
emp_shift_id = allShiftsSerializer()
class Meta:
model = emp_shifts
fields = '__all__'
def create(self, validated_data):
emp_id = validated_data.pop('emp_id')
emp_shift_id = validated_data.pop('emp_shift_id')
emp_object = emp_details.objects.get(pk=emp_id)
emp_shift_object = shift_master.objects.get(pk=emp_shift_id)
emp_shift_object = emp_shifts.objects.create(emp=emp_object, emp_shift=emp_shift_object, **validation_data)
return emp_shift_object
注意:我没有测试过此代码,这只是一个例子,可以更好地解释我的回复。