Django Rest Framework可写嵌套序列化器

10 浏览
0 Comments

Django Rest Framework可写嵌套序列化器

我正在为一门课程编写一个示例项目,这个项目是一个食谱组织器。除了使用一些非常基本的功能之外,我对DRF并不是很有经验。以下是目标:

创建一个新的食谱,并关联相关的食材。在创建食谱对象的同时创建食材对象。

models.py:

class Ingredient(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name
class Recipe(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True, null=True, help_text="这是您的食谱的简要描述")
    directions = models.TextField(help_text="如何制作食谱")
    ingredients = models.ManyToManyField(Ingredient)
    def __str__(self):
        return self.name

serializers.py

class IngredientSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ingredient
class RecipeSerializer(serializers.ModelSerializer):
    ingredients = IngredientSerializer(many=True)
    class Meta:
        model = Recipe
    def create(self, validated_data):
        ingredients_data = validated_data.pop('ingredients')
        recipe = Recipe.objects.create(**validated_data)
        for ingredient_data in ingredients_data:
            Ingredient.objects.create(**ingredient_data)
        return recipe

这段代码成功地在数据库中创建了食谱对象和食材对象,但没有将食材列表与食谱关联起来。我猜这是因为当我运行ingredients_data = validated_data.pop('ingredients')时,validated_data字典中的食材被移除了,所以当我使用validated_data创建一个新的食谱时,没有关联的食材。

然而,我似乎找不到一种方法来保持食材与食谱的关联。

0