我刚刚开始与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'
从我能看到的一切,我可以说它 具有该属性。我哪里出错?
答案 0 :(得分:2)
错误消息是正确的:QuerySet没有code
属性,只有单个的Category实例。
当您将查询集传递给序列化而不是实例时,您需要告诉它您正在为它提供一个集合,如tutorial所示:
serialized = CategorySerializer(queryset, many=True)
你真的应该通过那个教程:除了向你展示你做错了什么之外,它还会向你展示更好的方法(通过使用mixins或通用视图)。