将ModelSerializer与DRF和基于类的视图一起使用将返回属性错误

时间:2014-09-14 08:25:40

标签: python django django-rest-framework

我刚刚开始与DRF合作,我发现自己有点挣扎。我试图创建一个使用模型序列化程序的基于类的视图。但是,无论我尝试什么,我都会收到此错误:

  

'查询集'对象没有属性'代码'

我的模型确实具有此属性,并且我已确认查询集(当作为值转储时)也具有此属性。

models.py

class Category(models.Model):
    code = UUIDField(unique=True)
    name = models.CharField(max_length=100, null=True, blank=True, unique=True)
    parent_cat = models.ForeignKey('self', null=True, blank=True)

    def __unicode__(self):
        return self.name

urls.py

urlpatterns = patterns('', url(r'^', views.CatView.as_view()))

views.py

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category 

class CatView(APIView):
    def get(self, request, format=None):        
        queryset = Category.objects.all()
        serialized = CategorySerializer(queryset)

        return Response(serialized.data)

如果我转储Category.objects.all()电话的输出,我会看到以下数据:

[{'id': 1, 'code': '7889022e-4e03-4c27-860a-f07c2477db0c', 'parent_cat_id': None, 'name': 'Women'}, {'id': 2, 'code': '167c2578-b747-41f5-b2ad-1aa7e3f63952', 'parent_cat_id': 1, 'name': 'Clothing'}, {'id': 3, 'code': '176e0db1-1a4a-4cd3-a6f3-0cac07ab748c', 'parent_cat_id': 1, 'name': 'Dresses'}]

所以我至少可以验证数据是否正确地来自我的模型。但是,当我尝试返回响应时,我看到以下错误:

AttributeError at /category/ 
'QuerySet' object has no attribute 'code'

从我能看到的一切,我可以说它 具有该属性。我哪里出错?

1 个答案:

答案 0 :(得分:2)

错误消息是正确的:QuerySet没有code属性,只有单个的Category实例。

当您将查询集传递给序列化而不是实例时,您需要告诉它您正在为它提供一个集合,如tutorial所示:

serialized = CategorySerializer(queryset, many=True)

你真的应该通过那个教程:除了向你展示你做错了什么之外,它还会向你展示更好的方法(通过使用mixins或通用视图)。