有人可以解释下面我在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'属性。有人可以把我放在正确的轨道上,因为这让我感到困惑......
答案 0 :(得分:4)
biz_area
是QuerySet
个对象。这是一个集合而不是单个对象。
[{'_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属性。