Проверка Django для любого существует для запроса - PullRequest
71 голосов
/ 22 апреля 2010

В django как проверить, существует ли какая-либо запись для запроса

sc=scorm.objects.filter(Header__id=qp.id)

Так было в php

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }

Ответы [ 2 ]

154 голосов
/ 01 февраля 2012

Начиная с Django 1.2, вы можете использовать exists():

https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists

if some_queryset.filter(pk=entity_id).exists():
    print("Entry contained in queryset")
64 голосов
/ 22 апреля 2010

Использование count():

sc=scorm.objects.filter(Header__id=qp.id)

if sc.count() > 0:
   ...

Преимущество перед, например, len() означает, что QuerySet еще не оценен:

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

Имея это в виду, Когда оцениваются QuerySets может стоить прочитать.


Если вы используете get(), например, scorm.objects.get(pk=someid), и объект не существует, возникает исключение ObjectDoesNotExist:

from django.core.exceptions import ObjectDoesNotExist
try:
    sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
    print ...

Обновление: также можно использовать exists():

if scorm.objects.filter(Header__id=qp.id).exists():
    ....

Возвращает True, если QuerySet содержит какие-либо результаты, и False, если нет. Он пытается выполнить запрос самым простым и быстрым способом , но он выполняет почти тот же запрос, что и обычный запрос QuerySet.

...