我有两个班级
class Drink(models.Model):
name = models.CharField(max_length=100, blank=False, default='')
brand = models.TextField()
percentage = models.IntegerField()
class Drinking(models.Model):
amount = models.IntegerField(blank=False)
drinks = models.ForeignKey(Drink, related_name='drinks',blank = True,null=True)
并希望通过REST POST向Drink模型添加饮品列表。
在序列化程序中,我有以下内容:
class DrinkingSerializer(serializers.ModelSerializer):
drinks = serializers.PrimaryKeyRelatedField(many=True, read_only=False ,queryset=Drink.objects.all())
class Meta:
model = Drinking
fields = ('pk','drinks','amount')
def create(self, validated_data):
return Drinking.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.amount = validated_data.get('amount', instance.amount)
instance.save()
return instance
当我尝试发布饮酒对象时:
{
"drinks": [2],
"amount": 5
}
我得到错误,Drinkings.drinks必须是Drink实例。我的猜测是我必须更改查询集才能获得饮料的主键,但我不知道如何。
更新 我在逻辑方面做了一些小改动,所以每个饮酒课只能喝一杯和一杯。现在使用以下Serializer:
class DrinkingSerializer(serializers.ModelSerializer):
drink = serializers.PrimaryKeyRelatedField(many=False, read_only=False, queryset=Drink.objects.all())
答案 0 :(得分:0)
您确定ID为2的Drink对象存在吗?
另外,尝试不带括号的请求:"drinks": 2
- 在我的DRF Api中不需要任何其他内容。
答案 1 :(得分:0)
我认为您饮酒模型中的野外饮品应该是饮品模型。
class Drinking(models.Model):
amount = models.IntegerField(blank=False)
class Drink(models.Model):
name = models.CharField(max_length=100, blank=False, default='')
brand = models.TextField()
percentage = models.IntegerField()
drinks = models.ForeignKey(Drinking, related_name='drinks',blank = True,null=True)
然后,使用这些模型,您的序列化程序应如下所示:
class DrinkingSerializer(serializers.ModelSerializer):
drinks = serializers.PrimaryKeyRelatedField(many=True, read_only=False ,queryset=Drink.objects.all())
class Meta:
model = Drinking
fields = ('pk','drinks','amount')
我希望这会有所帮助。