DRF异常值:无法分配 - 它必须是实例

时间:2015-09-27 18:57:42

标签: python django rest django-rest-framework

我知道解决这个问题有很多问题,但我还没有解决。我是第一次使用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

1 个答案:

答案 0 :(得分:3)

你有从餐馆到类别的ForeignKey。这意味着每家餐厅只有一个类别。但是您要发送类别slug列表,并且在SlugRelatedField的定义中有many=True

您的数据应为{..."category": "Italian food"...},您应该删除many=True