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)
你能把配料和配方模型也贴出来吗?我加了模型,谢谢