AttributeError:'QuerySet'对象没有属性

时间:2013-03-20 15:11:55

标签: python django

有人可以解释下面我在shell输出中看到的内容:

import test/models.py

biz_area = BusinessArea.objects.filter(business_area_manager=user)

dprint(biz_area)
[{'_state': <django.db.models.base.ModelState object at 0x3726890>,
'business_area_id': Decimal('42'),
'business_area_manager': Decimal('999'),
'business_area_name': u'group 1',
'inactive': u'N'}]

biz_area.business_area_id

Traceback (most recent call last):
File "<<console>console>", line 1, in <<module>module>
AttributeError: 'QuerySet' object has no attribute 'business_area_id'

因此,python说,当对象的漂亮打印列表显示它确实具有这样的属性时,biz_area查询集没有'business_area_id'属性。有人可以把我放在正确的轨道上,因为这让我感到困惑......

4 个答案:

答案 0 :(得分:4)

biz_areaQuerySet个对象。这是一个集合而不是单个对象。

[{'_state': <django.db.models.base.ModelState object at 0x3726890>,
'business_area_id': Decimal('42'),
'business_area_manager': Decimal('999'),
'business_area_name': u'group 1',
'inactive': u'N'}]

括号([])表示集合。您可以将其视为一个python列表

有几种方法可以解决这个问题:

过滤器将始终返回一组对象

biz_areas = BusinessArea.objects.filter(business_area_manager=user)
for biz_area in biz_areas:
  biz_area.business_area_id

如果BusinessArea只有一个关联user

biz_area = BusinessArea.objects.get(business_area_manager=user)
biz_are.business_area_id

阅读有关get的文档,如果有更多对象或0个与您的查询匹配的对象,它将引发异常

答案 1 :(得分:0)

错误的是,biz_area的精美字体并未显示它具有business_area_id属性,如果它具有它,则会很奇怪,因为查询集是对象的集合(作为列表可见)在漂亮的印刷品中,虽然它实际上不是一个列表)并且business_area_id是单个对象的属性。

答案 2 :(得分:0)

biz_area是Queryset对象,表示它是对象的集合。 循环访问biz_area以获得business_area_id。

for i in biz_area:
  i.business_area_id

答案 3 :(得分:-1)

如果您输入

type(biz_area)

你会看到它是一个列表类型,而不是查询集中的对象。您必须遍历biz_area变量中的所有项目并将其打印出来。

如果您retrieved a single object,则可以像访问其一样访问其business_area_id属性。