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

时间:2010-05-18 01:33:43

标签: python django django-models

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

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

然后检查返回结果的长度,但有没有办法以更优雅的方式进行呢?

4 个答案:

答案 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')