He encontrado muchas respuestas a preguntas similares pero no a mi específica. Estoy tratando de actualizar Create Method para mi serializador que tiene dos serializadores anidados:
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 taskTambién quiero agregar el serializador anidado "prep" para que se actualice al mismo tiempo, pero parece que no puedo obtener la sintaxis correcta.
Cualquier ayuda, muy apreciada.
Debería funcionar bien, creo que te estás perdiendo many=True . ¿Esto funciona? (Suponiendo que los products y prep deberían ser muchos)
Y también asumiendo que sus modelos están estructurados así:
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 taskA continuación, puede enviar una solicitud como:
{ "products": [ {"foo": "bar"} ], "preps": [ {"foo": "bar"} ], }