【发布时间】:2019-01-29 03:30:09
【问题描述】:
我的模型:
class ContentHotel(models.Model):
hotel_id = models.IntegerField(unique=True, blank=True, primary_key=True)
class Meta:
managed = False
db_table = 'content_hotels'
ordering = ('hotel_id',)
def __str__(self):
return str(self.hotel_id)
class RateHotel(models.Model):
rate_hotel_id = models.IntegerField(blank=True, primary_key=True, unique=True)
content_hotel = models.ForeignKey(ContentHotel, on_delete=models.CASCADE, related_name='rate_hotel')
class Meta:
managed = False
db_table = 'rate_hotels'
ordering = ('rate_hotel_id',)
def __str__(self):
return str(self.rate_hotel_id)
我的序列化器:
class RateHotelSerializer(serializers.ModelSerializer):
class Meta:
model = RateHotel
fields = __all__
class ContentHotelSerializer(serializers.ModelSerializer):
rate_hotel = RateHotelSerializer(many=True)
class Meta:
model = ContentHotel
fields = ('hotel_id', 'rate_hotel')
def create(self, validated_data):
rate_hotels = validated_data.pop('rate_hotel')
content_hotel = ContentHotel.objects.create(**validated_data)
for rate_hotel in rate_hotels:
RateHotel.objects.create(content_hotel=content_hotel, **rate_hotel)
return content_hotel
JSON:
{
"hotel_id": -1,
"rate_hotel": [{"content_hotel": -1, "rate_hotel_id": 1}]
}
上面的 JSON 输入给了我这样的错误:
{
"rate_hotel": [
{
"content_hotel": [
"Invalid pk \"1\" - object does not exist."
]
}
],
"status_code": 400
}
参考:http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers
我参考了上面的链接,有人知道如何解决这个问题吗?但是如果我分别创建这两个对象,它可以正常工作,如下所示:
{
"hotel_id": -1,
}
{
"content_hotel": -1,
"rate_hotel_id": 1
}
【问题讨论】:
-
你能在这两种情况下检查 .create() 中的 rate_hotels 的值是多少吗?
-
我认为你的错误在于传递 "rate_hotel_id": 1 在第一种情况下,你不应该传递要创建的 id 的对象。
-
它与“rate_hotel_id”无关,它是一个验证错误,就像@changak提到的一样。
标签: django django-rest-framework