Ровно одна запись; бросает исключение при 0 или >1
.first()
Объект или None
Первая запись QuerySet
.last()
Объект или None
Последняя запись QuerySet
.count()
int
Количество записей (SELECT COUNT)
.exists()
bool
True если есть хотя бы одна запись
.values(*fields)
QuerySet[dict]
Записи как словари с указанными полями
.values_list(*fields)
QuerySet[tuple]
Записи как кортежи
.order_by(*fields)
QuerySet
Сортировка; -field для убывания
.distinct()
QuerySet
Убрать дублирующиеся строки (SELECT DISTINCT)
Lookups — условия фильтрации
Lookup
Описание
Пример
__exact
Точное совпадение (регистрозависимо)
title__exact="Gatsby"
__iexact
Точное совпадение (без учёта регистра)
title__iexact="gatsby"
__contains
Содержит подстроку (регистрозависимо)
title__contains="Gatsby"
__icontains
Содержит подстроку (без учёта регистра)
title__icontains="gatsby"
__startswith
Начинается с (регистрозависимо)
title__startswith="The"
__istartswith
Начинается с (без учёта регистра)
title__istartswith="the"
__endswith
Заканчивается на (регистрозависимо)
title__endswith="Gatsby"
__iendswith
Заканчивается на (без учёта регистра)
title__iendswith="gatsby"
__in
Значение входит в список
id__in=[1, 2, 3]
__gt
Больше чем
price__gt=10
__gte
Больше или равно
price__gte=10
__lt
Меньше чем
price__lt=50
__lte
Меньше или равно
price__lte=50
__isnull
Значение IS NULL (True) или IS NOT NULL (False)
price__isnull=True
__range
Значение в диапазоне (включая границы, BETWEEN)
published_date__range=["2020-01-01","2023-12-31"]
Класс Q — логические операторы
from django.db.models import Q
# AND (&) — оба условия истинны
filter(Q(a=1) & Q(b=2))
# OR (|) — хотя бы одно условие истинно
filter(Q(a=1) | Q(b=2))
# NOT (~) — условие ложно
filter(~Q(a=1))
# Комбинация
filter((Q(a=1) | Q(b=2)) & ~Q(c=3))
Исключения
Исключение
Когда возникает
Импорт
Model.DoesNotExist
get() не нашёл записи
Встроен в модель; также from django.core.exceptions import ObjectDoesNotExist
MultipleObjectsReturned
get() нашёл более одной записи
from django.core.exceptions import MultipleObjectsReturned