Проверка Django для любого существует для запроса


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

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

вот как это было сделано в php

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

2 ответа:

использовать count():

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

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

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

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

имея это в виду, при вычислении запросов может быть стоит чтение.


если вы используете 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 если запрос содержит какие-либо результаты, и False если не. Это пытается выполнить запрос самым простым и быстрым способом возможно, но он выполняет почти то же самое запрос, как в обычном запросе объект QuerySet.

начиная с 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")