Скажите, что у меня есть таблица People
, есть ли путь только к быстро проверке если a People
объект существует с названием 'Fred'
? Я знаю, что могу запросить
People.objects.filter(Name='Fred')
и затем проверьте длину возвращенного результата, но есть ли способ сделать это более изящным способом?
Обновление :
Как упоминалось в более поздних ответах, начиная с Django 1.2 вы можете вместо этого использовать метод exists ()
( ссылка ).
Исходный ответ:
Не используйте len () для результата, вы должны использовать People.objects.filter (Name = 'Fred'). Count ()
. Согласно документации django,
count () выполняет SELECT COUNT (*) за кулисами, так что вы должны всегда используйте count () вместо загрузки вся запись в объекты Python и вызывая len () для результата (если вам не нужно загружать объекты в любом случае в память, и в этом случае len () будет быстрее).
источник: Django docs
Метод exists () в API QuerySet доступен начиная с Django 1.2 .
Вы можете использовать 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')
Начиная с Django 1.2, вы могли использовать .exists ()
в QuerySet, но в предыдущих версиях вы могли пользоваться очень эффективным трюком, описанным в этот билет .