Поскольку Django моделирует, там ярлык для наблюдения, если запись существует?

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

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

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

35
задан user2291758 7 January 2015 в 16:22
поделиться

4 ответа

Обновление :

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


Исходный ответ:

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

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

источник: Django docs

38
ответ дан 27 November 2019 в 06:41
поделиться

Метод exists () в API QuerySet доступен начиная с Django 1.2 .

41
ответ дан 27 November 2019 в 06:41
поделиться

Вы можете использовать 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')
4
ответ дан 27 November 2019 в 06:41
поделиться

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

7
ответ дан 27 November 2019 в 06:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: