【问题标题】:AttributeError: 'QuerySet' object has no attributeAttributeError:“QuerySet”对象没有属性
【发布时间】:2019-08-14 15:10:31
【问题描述】:

谁能解释一下我在下面的 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' 属性,而漂亮打印的对象列表显示它确实具有这样的属性。有人可以在这里把我放在正确的轨道上吗,因为这让我有些困惑......

【问题讨论】:

  • biz_area['business_area_id'] 呢?
  • @Matthias 不起作用,因为biz_area 是对象的集合
  • 你当然是对的。我应该用我的其他眼镜来看看这个问题......

标签: python django


【解决方案1】:

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 个对象与您的查询匹配,它将引发异常

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      for i in biz_area:
        i.business_area_id
      

      【讨论】:

        【解决方案4】:

        如果你输入

        type(biz_area)
        

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

        如果您retrieved a single object,您就可以像您一样访问它的 business_area_id 属性。

        【讨论】:

        • biz_area 是一个 django.db.models.query.QuerySet
        猜你喜欢
        • 2017-07-19
        • 2016-11-20
        • 2019-07-10
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        • 2022-12-10
        相关资源
        最近更新 更多