我知道解决这个问题有很多问题,但我还没有解决。我是第一次使用DRF而且我正在使用嵌套的序列化程序。我的餐厅序列化程序通过slug相关字段指向类别序列化程序,如下所示
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = (
'name',
'description'
)
class RestaurantSerializer(serializers.HyperlinkedModelSerializer):
category = serializers.SlugRelatedField(
many=True,
read_only=False,
queryset=Category.objects.all(),
slug_field='name'
)
class Meta:
model = Restaurant
fields = (
'id',
'name',
'description',
'website',
'twitter',
'facebook',
'instagram',
'category'
)
我将所有必要的数据发送到我的终端,通过jquery创建一个新的餐厅,但我一直得到“无法分配”[<类别:意大利食品>]“:”Restaurant.category“必须是”类别“实例。”
我知道我需要将一个Category对象分配给Restaurant的类别,尽管我不知道如何访问我的queryset来提取重要的对象。
对此有何建议?
编辑:这是我从jquery发送到我的终端的数据
{"name":"Restaurant","email":"restaurant@gmail.com","password":"1234","category":["Italian food"],"description":"Description test"}
编辑#2 请参阅下面的模型定义
class Restaurant(models.Model):
name = models.CharField(max_length=80, null=False)
description = models.TextField(max_length=300, null=False)
email = models.EmailField(max_length=80, null=True)
password = models.CharField(max_length=60, null=False)
website = models.URLField(max_length=80, null=True)
twitter = models.CharField(max_length=60, null=True, blank=True)
facebook = models.CharField(max_length=60, null=True, blank=True)
instagram = models.CharField(max_length=60, null=True, blank=True)
category = models.ForeignKey('Category')
def __unicode__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=80, null=False)
description = models.TextField(max_length=100, null=False)
def __unicode__(self):
return self.name
答案 0 :(得分:3)
你有从餐馆到类别的ForeignKey。这意味着每家餐厅只有一个类别。但是您要发送类别slug列表,并且在SlugRelatedField的定义中有many=True
。
您的数据应为{..."category": "Italian food"...}
,您应该删除many=True
。