Skip to main content
 首页 » 编程设计

python之初学者 : Examining Queryset results

2025年05月04日20freeliver54

免责声明:我是 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