こんにちは、私はdjango serializers.facingの小さな問題をPOSTシリアライザで初めて知っています。Django POSTシリアライザForeignkeyネストされたデータ
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
}
を送信する場合、そのはhere.I FOREIGNKEY関係テーブルからEMP_ID、emp_shift_idを渡す必要があり、私はこの問題を知っているエラー
{
"emp_id": [
"This field is required."
],
"emp_shift_id": [
"This field is required."
]
}
を与えます。 は私がemp_code主キーを取得し、
empAllShiftsSerializer()ここで
に二つの値が正常にデータをPOSTすることを送信する方法を主key.Butをshift_nameすることができています。 私がここで間違っている場合は私を修正してください。
シリアライザを使用せずにviews.pyのemp_shifts.objects.create()からデータを保存できますか? – user1335606
私はそう思います。しかし、私が答えを示すように、最良の選択肢はSerializerクラスのcreateメソッドをオーバーライドしてシリアライザを使い続けることです。 – edgarzamora
はい。うまくいきます。ありがとうございます。 – user1335606