免责声明:我是 python 和 Django 的新手,但有 Drupal 编程经验。
我正在按照这里的教程 (http://www.djangobook.com/en/2.0/chapter05/),但我对
Publisher.objects.filter(name='Apress')
[<Publisher: Apress>]
我知道结果是一个 Queryset 对象,那么当以下方法失败时我如何检索地址(或主键)?
p = Publisher.objects.filter(name='Apress')
a = p.address
'QuerySet' object has no attribute 'address'
谢谢!
请您参考如下方法:
属性仅在模型实例上可用。 QuerySet 简单来说就是模型实例的列表,因此您必须以某种方式“解压”它以获取特定实例,然后获取该实例的属性。
如果您知道只有一个您正在查询的内容,您应该使用 get 而不是 filter:
publisher = Publisher.objects.get(name='Apress')
print publisher.address
但是,如果返回多个匹配项,则会引发 MultipleObjectsReturned 异常,相反,如果未找到匹配项,则会引发 ObjectDoesNotExist 异常。因此,在使用 get 时需要小心,并确保将代码包装在适当的 try...except block 中。
如果你正在处理你期望不止一个结果的事情,那么你可以使用某种循环结构来处理 QuerySet 中的每个单独的项目:
for publisher in Publisher.objects.all():
print publisher.address
或者,像使用传统列表一样直接拉出一项:
first_publisher = Publisher.objects.all()[0]
print first_publisher.address
