Django模型中是否有查看记录是否存在的快捷方式?

50 投票
5 回答
61729 浏览
提问于 2025-04-15 22:50

假设我有一个叫做 People 的表格,我想快速检查一下里面是否有一个名字叫 'Fred' 的人。虽然我知道可以通过查询

People.objects.filter(Name='Fred')

然后查看返回结果的长度,但有没有更简单优雅的方法呢?

5 个回答

11

你可以使用 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')
47

在QuerySet API中,有一个叫做 exists() 的方法,这个方法从 Django 1.2 版本开始就可以使用了。

50

更新

如最近的回答所提到的,自从Django 1.2版本起,你可以使用 exists() 方法来代替 (链接)。


原始回答:

不要对结果使用 len(),你应该用 People.objects.filter(Name='Fred').count()。根据Django的文档,

count() 在后台执行一个 SELECT COUNT(*) 的操作,所以你应该总是使用 count(),而不是把所有记录加载到Python对象中,然后对结果调用 len()(除非你本来就需要把对象加载到内存中,这种情况下 len() 会更快)。

来源: Django文档

撰写回答