Django REST框架,PUT/POST序列化程序数据丢失

Django REST框架,PUT/POST序列化程序数据丢失,django,serialization,django-rest-framework,Django,Serialization,Django Rest Framework,当我试图更新或发布一个新实例时,我的部分数据消失了,这使我遇到了麻烦 有这样的数据 data = { 'item': 'Product', 'station': 'Workbench', 'ingredients':[ {'item': 'ing1', 'amount': 2}, {'item': 'ing2', 'amount':1} ] } 我有一个带有嵌套

当我试图更新或发布一个新实例时,我的部分数据消失了,这使我遇到了麻烦

有这样的数据

data = {
        'item': 'Product', 
        'station': 'Workbench', 
        'ingredients':[
            {'item': 'ing1', 'amount': 2},
            {'item': 'ing2', 'amount':1}
         ]
        }
我有一个带有嵌套序列化程序的序列化程序,可以根据需要获取或创建成分

class IngredientSerializer(serializers.ModelSerializer):

    class Meta:
        model = Ingredient
        fields = ('item', 'amount')


class WriteableRecipeSerializer(serializers.ModelSerializer):
    item = serializers.PrimaryKeyRelatedField(queryset=Item.objects.all())
    ingredients = IngredientSerializer(many=True)
    station = serializers.PrimaryKeyRelatedField(queryset=Item.objects.all())

    def create(self, validated_data):
        logger.info(validated_data)
        ingredient_data = validated_data.pop('ingredients')
        recipe = Recipe.objects.create(**validated_data)

        for ingredient in ingredient_data:
            ingredient_item = Item.objects.get(name=ingredient['item'])
            amount = ingredient['amount']
            ingredient, created = Ingredient.objects.get_or_create(item=ingredient_item, amount=amount
                                   )
            recipe.ingredients.add(ingredient)

        return recipe

    def update(self, instance, validated_data):
        logger.info(validated_data)
        ingredient_data = validated_data.pop('ingredients')
        instance.item = validated_data.get('item', instance.item)
        instance.station = validated_data.get('station', instance.station)

        for ingredient in ingredient_data:
            ingredient_item = Item.objects.get(name=ingredient['item'])
            amount = ingredient['amount']
            ingredient, created = Ingredient.objects.get_or_create(item=ingredient_item, amount=amount)
            logger.info('Itering')
            instance.ingredients.add(ingredient)

        return instance

    class Meta:
        model = Recipe
        fields = ('item', 'amount', 'ingredients', 'station')
数据验证后,我得到一个响应代码200,但我的记录器在创建和更新方法中显示的响应数据和已验证的_数据a都返回如下内容:

    data = {
        'item': 'Product', 
        'station': 'Workbench', 
        'ingredients':[]
        }
这些数据在某处擅离职守。 我曾尝试将成分序列化程序设置为通用序列化程序,并覆盖WriteableRecipeSerializer的验证以仅返回属性,但问题仍然存在

为模型编辑:

class Ingredient(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    amount = models.IntegerField()

    def __str__(self):
        return self.item.name + '(' + str(self.amount) + ')'

class Recipe(models.Model):
    item = models.OneToOneField(Item, related_name='recipe', on_delete=models.CASCADE)
    amount = models.IntegerField(default=1)
    ingredients = models.ManyToManyField(Ingredient)
    station = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='as_station')

    def __str__(self):
        return 'Recipe: ' + str(self.item)

你能把配料和配方模型也贴出来吗?我加了模型,谢谢