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

Rhu*_*arb 35 python django django-models

假设我有一个表People,有没有办法快速检查People一个名称是否存在的对象'Fred'?我知道我可以查询

People.objects.filter(Name='Fred')
Run Code Online (Sandbox Code Playgroud)

然后检查返回结果的长度,但有没有办法以更优雅的方式做到这一点?

Cha*_*ert 41

自Django 1.2以来,QuerySet API中的exists()方法可用.


vit*_*bal 38

更新:

正如在最近的答案中所提到的,自Django 1.2以来,您可以使用该exists()方法(链接).


原答案:

不要在结果上使用len(),你应该使用People.objects.filter(Name='Fred').count().根据django文档,

count()在幕后执行SELECT COUNT(*),因此你应该总是使用count()而不是将所有记录加载到Python对象中并在结果上调用len()(除非你需要将对象加载到内存中)无论如何,在这种情况下len()会更快).

来源:Django文档


tde*_*cko 7

您可以使用count()例如:

People.objects.filter(Name='Fred').count()
Run Code Online (Sandbox Code Playgroud)

如果 Name 列是唯一的,那么您可以执行以下操作:

try:
  person = People.objects.get(Name='Fred')
except (People.DoesNotExist):
  # Do something else...
Run Code Online (Sandbox Code Playgroud)

您还可以使用get_object_or_404()例如:

from django.shortcuts import get_object_or_404
get_object_or_404(People, Name='Fred')
Run Code Online (Sandbox Code Playgroud)


Tut*_*tle 7

从Django 1.2开始,您可以.exists()在QuerySet上使用,但在以前的版本中,您可能会享受此票证中描述的非常有效的技巧.