Ответ 1
Используйте 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 ...
Update:
также можно использовать exists()
:
if scorm.objects.filter(Header__id=qp.id).exists():
....
Возвращает
True
, если QuerySet содержит любые результаты, аFalse
, если нет. Это пытается выполнить запрос самым простым и быстрым способом, но он выполняет почти тот же запрос, что и обычный запрос QuerySet.