[英]How to create values to foreign key model in DRF serializer?
將json發送到服務器時,顯示以下錯誤:
Direct assignment to the reverse side of a related set is prohibited. Use items.set() instead.
請幫幫我。 最近開始研究DRF,不明白如何在django中正確編寫def create將數據寫入外鍵模型?
這是我的代碼serializer.py
class ConsignmentNoteSerializer(serializers.ModelSerializer):
create_user = serializers.HiddenField(default=serializers.CurrentUserDefault())
create_user = UserSerializer(source='creator', read_only=True)
contragent_detail = ContragentSerializer(source='contragent', read_only=True)
items = ConsignmentItemSerializer(many=True)
class Meta:
model = ConsignmentNote
fields = ['id', 'doc_type', 'date', 'number', 'contragent_detail', 'comment', 'create_user', 'items', 'created']
**def create(self, validated_data):
items_data = self.validated_data.pop('items')
return ConsignmentNote.objects.create(**validated_data)**
這是我要發送的 json
{
"id": 9,
"doc_type": "capitalize",
"date": "2022-06-04",
"number": 98,
"contragent_id": 4,
"comment": "",
"items": [
{
"id": 18,
"product": 10,
"buy_price": "200.00",
"sell_price": "500.00",
"quantity": 5
},
],
}
我認為您需要上傳item_ids
數據。
class ConsignmentNoteSerializer(serializers.ModelSerializer):
...
item_ids = serializers.ListField(
child = serializers.IntegerField,
write_only = True
)
class Meta:
model = ConsignmentNote
fields = ['id', 'doc_type', 'date', 'number', 'contragent_detail', 'comment', 'create_user', 'items', 'created', 'item_ids']
def create(self, validated_data):
item_ids = self.validated_data.pop('item_ids')
new_obj = ConsignmentNote.objects.create(**validated_data)
new_obj.set(item_ids)
return new_obj
在這種情況下,有效載荷應該是
{
"doc_type": "capitalize",
"date": "2022-06-04",
"number": 98,
"contragent_id": 4,
"comment": "",
"item_ids": [18],
}
這解決了我的問題
def create(self, validated_data):
items = validated_data.pop('items')
note = ConsignmentNote.objects.create(**validated_data)
for item in items:
product = item.pop('product')
item = ConsignmentItem.objects.create(consignmentnote=note, product=product ,**item)
return note
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.