我找到了許多類似問題的答案,但沒有找到我的具體問題。我正在嘗試更新具有兩個嵌套序列化程式的序列化程式的 Create 方法:
class TaskSerializer(serializers.ModelSerializer):
products = ProductSerializer()
prep = PrepSerializer()
class Meta:
model = Task
fields = '__all__'
def create(self, validated_data):
products_data = validated_data.pop('products')
task = Task.objects.create(**validated_data)
for products_data in products_data:
Product.objects.create(task=task, **products_data)
return task
我想同時添加“準備”嵌套序列化程式以進行更新,但我似乎無法正確使用語法。
任何幫助,不勝感激。
uj5u.com熱心網友回復:
它應該可以正常作業,我認為您缺少many=True. 這行得通嗎?(假設和products與prep應該不少)
并假設您的模型結構如下:
class Task(models.Model)
#fields
class Product(models.Model)
task = models.ForeignKey(Task, on_delete=models.CASCADE)
class Prep(models.Model)
task = models.ForeignKey(Task, on_delete=models.CASCADE)
class TaskSerializer(serializers.ModelSerializer):
products = ProductSerializer(many=True)
preps = PrepSerializer(many=True)
class Meta:
model = Task
fields = '__all__'
def create(self, validated_data):
products_data = validated_data.pop('products')
preps_data = validated_data.pop('preps')
task = Task.objects.create(**validated_data)
for products_data in products_data:
Product.objects.create(task=task, **products_data)
for prep_data in preps_data:
Prep.objects.create(task=task, **prep_data)
return task
然后您可以發送如下請求:
{
"products": [
{"foo": "bar"}
],
"preps": [
{"foo": "bar"}
],
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351089.html
