为两个嵌套的序列化程序更新 Django Rest Framework 中的 Create 方法

Update Create Method in Django Rest Framework for two nested serializers

我找到了很多类似问题的答案,但没有找到我的特定问题的答案。我正在尝试为我的序列化程序更新创建方法,它有两个嵌套序列化程序:

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

我也想添加“prep”嵌套序列化程序以同时更新,但我似乎无法正确理解语法。

任何帮助,不胜感激。

它应该可以正常工作,我想你错过了 many=True。这行得通吗? (假设 and productsprep 应该很多)

同时假设您的模型结构如下:

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"}
    ],
}