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. Спасибо.
Феликс Клинг,


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.