Обновление метода Create в Django Rest Framework для двух вложенных сериализаторов
Я нашел много ответов на похожие вопросы, но не на мой конкретный. Я пытаюсь обновить метод 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
Я хочу добавить вложенный сериализатор "prep", чтобы он обновлялся в то же время, но не могу правильно подобрать синтаксис.
Любая помощь, очень признательна.
Это должно работать нормально, я думаю, что вам не хватает 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"}
],
}