Django проверяет наличие любого запроса

87

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

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

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

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }
Халк
источник

Ответы:

87

Использование 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.

Феликс Клинг
источник
51
if scorm.objects.filter(Header__id=qp.id).exists()
Александр Лебедев
@Alex Lebedev: Да, этот метод будет доступен в Django 1.2. Спасибо.
Феликс Клинг,
183

Начиная с 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")
сдорнан
источник
25
Это должен быть принятый ответ. exists () обычно значительно быстрее, чем count ().
frmdstryr 04
1
.objects.get(pk=...)
Брэд Соломон
0

это сработало для меня!

if some_queryset.objects.all (). exists (): print («эта таблица не пуста»)

i_m_brunda
источник