2013-03-20 4 views
3

Может кто-то объяснить, что я вижу в выходе оболочки ниже, пожалуйста:AttributeError: объект «QuerySet» не имеет атрибута

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' 

Так, питон не говорит о том, что biz_area QuerySet уже нет «business_area_id» атрибут когда довольно печатный список объекта показывает, что он имеет такой атрибут. Может ли кто-то поставить меня на правильный путь здесь, так как это меня немного сбивает с толку ...

+0

Как насчет 'biz_area ['business_area_id']'? – Matthias

+0

@ Matthias, который не работает как 'biz_area' - это сбор объектов – dm03514

+0

Вы правы, конечно. Я должен был использовать другие очки, чтобы посмотреть на вопрос ... – Matthias

ответ

0

Неверный, красивый отпечаток biz_area не показывает, что он имеет атрибут business_area_id, и было бы странно, если бы оно было, queryset - это набор объектов (видимый как список в довольно печатном виде, хотя на самом деле это не список), а business_area_id является атрибутом одного объекта.

-1

если вы наберете

type(biz_area) 

вы увидите это тип списка, а не объект из QuerySet. Вы должны перебирать все элементы в переменной biz_area и распечатывать их.

Если вы retrieved a single object, вы можете получить доступ к его атрибуту business_area_id, как вы.

+0

biz_area - это django.db.models.query.QuerySet – ePascoal

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'}] 

Кронштейны ([]) обозначают коллекцию. Вы можете думать об этом с точки зрения как список питона

Есть несколько способов обработки:

фильтр всегда будет возвращать полуботинки объектов

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 объектов, соответствующих вашему запросу

Смежные вопросы