Атрибуты доступны только для экземпляров модели. QuerySet
- это просто список экземпляров модели, поэтому вам нужно как-то «распаковать» его, чтобы получить конкретный экземпляр и затем его атрибут.
Если вы знаете, что запрашиваете только одну вещь, вам следует использовать get
вместо фильтра:
publisher = Publisher.objects.get(name='Apress')
print publisher.address
Но если будет возвращено несколько совпадений, возникнет исключение MultipleObjectsReturned
, и, наоборот, если совпадений не будет найдено, возникнет исключение ObjectDoesNotExist
. В результате вы должны быть осторожны при использовании get
и обернуть свой код в соответствующие блоки try...except
.
Если вы имеете дело с чем-то, где ожидаете более одного результата, то вы можете использовать некую структуру цикла для работы с каждым отдельным элементом в QuerySet
:
for publisher in Publisher.objects.all():
print publisher.address
Или вытащите один элемент, как в обычном списке:
first_publisher = Publisher.objects.all()[0]
print first_publisher.address