Для моделей Django есть ли ярлык для просмотра, существует ли запись? - PullRequest
34 голосов
/ 18 мая 2010

Скажите, у меня есть таблица People, есть ли способ просто быстро проверить, существует ли объект People с именем 'Fred'? Я знаю, что могу запросить

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

и затем проверьте длину возвращаемого результата, но есть ли способ сделать это более элегантным способом?

Ответы [ 4 ]

41 голосов
/ 18 мая 2010

Существует метод () в API QuerySet , начиная с Django 1.2 .

37 голосов
/ 18 мая 2010

Обновление :

Как уже упоминалось в более поздних ответах, начиная с Django 1.2 вы можете использовать метод exists() ( ссылка ).


Оригинальный ответ:

Не используйте len () для результата, вы должны использовать People.objects.filter(Name='Fred').count(). Согласно документации Django,

count () выполняет SELECT COUNT (*) за кулисами, так что вы должны всегда используйте count () вместо загрузки все записи в объекты Python и вызывая len () для результата (если вам не нужно загружать объекты в любом случае, в этом случае len () будет быстрее).

источник: Django docs

6 голосов
/ 19 мая 2010

Начиная с Django 1.2, вы могли использовать .exists() в QuerySet, но в предыдущих версиях вы могли пользоваться очень эффективным трюком, описанным в этом билете .

4 голосов
/ 18 мая 2010

Вы можете использовать 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')
...