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