假设我有一个表People
,有没有办法快速检查People
对象是否存在,名称为'Fred'
?我知道我可以查询
People.objects.filter(Name='Fred')
然后检查返回结果的长度,但有没有办法以更优雅的方式进行呢?
答案 0 :(得分:41)
QuerySet API中的exists()方法可用since Django 1.2。
答案 1 :(得分:37)
更新:
正如最近的答案中所提到的,自Django 1.2起,您可以改为使用exists()
方法(link)。
原始答案:
不要对结果使用len(),你应该使用People.objects.filter(Name='Fred').count()
。根据django文档,
count()执行SELECT COUNT(*) 在幕后,所以你应该 总是使用count()而不是加载 所有记录到Python对象中 并在结果上调用len() (除非你需要加载对象 无论如何,进入记忆,在这种情况下 len()会更快。)
来源:Django docs
答案 2 :(得分:6)
从Django 1.2开始,您可以在QuerySet上使用.exists()
,但在以前的版本中,您可能会享受this ticket中描述的有效技巧。
答案 3 :(得分:4)
您可以使用count()
例如:
People.objects.filter(Name='Fred').count()
如果“名称”列是唯一的,则可以执行以下操作:
try:
person = People.objects.get(Name='Fred')
except (People.DoesNotExist):
# Do something else...
您也可以使用get_object_or_404()
例如:
from django.shortcuts import get_object_or_404
get_object_or_404(People, Name='Fred')