4

有人可以解释一下我在下面的 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

4 回答 4

6

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

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

于 2013-03-20T15:31:43.350 回答
0

错了,漂亮的打印biz_area并没有显示它有business_area_id属性,如果它有它会很奇怪,因为查询集是一个对象的集合(在漂亮的打印中作为一个列表可见,尽管它实际上不是一个列表)并且business_area_id是单个对象的属性。

于 2013-03-20T15:17:25.843 回答
0

biz_area 是 Queryset 对象,表示它是对象的集合。遍历 biz_area 以获取 business_area_id。

for i in biz_area:
  i.business_area_id
于 2019-08-14T07:10:31.607 回答
-1

如果你输入

type(biz_area)

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

如果您检索到单个对象,则可以像以前一样访问其 business_area_id 属性。

于 2013-03-20T15:19:56.273 回答