_set
()Доступ к вторичной таблице
class Category(models.Model):
name = models.CharField(...)
class Good(models.Model):
category = models.ForeignKey(
Category,
on_delete=models.SET_NULL,
)
Category.good_set.count()
aggregate
()Агрегатная функция. Возвращает словарь со значениями агрегатных функции.
Позволяет:
подсчитать сумму значений поля
подсчитать среднее арифметичское значений поля
…
# количесвто значение, Count(поле, уникальные)
from django.db.models import Count
# среднее арифметическое значений, Avg(поле)
from django.db.models import Avg
# сумма значений, Sum(поле)
from django.db.models import Sum
# максимальное значение, Max(поле)
from django.db.models import Max
# минимальное значение, Min(поле)
from django.db.models import Min
# отклонение значений, StdDev(поле, отклонение)
from django.db.models import StdDev
# дисперсия значений, Variance(поле, дисперсия)
from django.db.models import Variance
Goods.objects.aggregate(models.Max('created'), models.Min('created'))
# { 'created__max': date , 'created__min': date }
all
()Возвращает QuerySet, записи запроса
# все записи таблицы
Good.objects.all()
# только 5 элементов
Good.objects.all()[:5]
# записи с каким то условием
Good.objects.filter(...).all()
annotate
()# models.py
from django.db import models
class Post(models.Model):
user = models.ForeignKey("auth.User")
# количесвто постов для пользователей
Post.objects.values("user").annotate(Count("id"))
# [{'user': 1, 'id__count': 3}, {'user': 2, 'id__count': 1} ...
count
()Возвращает число, количесво записей в запросе
# количесвто записей в таблице
Good.objects.count()
# количесвто записей в запросе после фильтрации
Good.objects.filter(...).count()
create
()Создает и возврщает новый объект модели
good = Good.objects.create(title="some_title")
distinct
()Оставляет в запросе только уникальные записи
Good.objects.distinct()
Good.objects.distinct('name', 'category__name')
earliest
()Возвращает обхект запроса с наименьшим значением параметра указанного поля
exclude
(**kwargs)Возвращает QuerySet, исключая записи, которые удовлетворяют условиям.
Аналогичен filter, только исключает записи из выборки.
# количесвто записей исключая записи с имененм Pencil
Good.objects.exclude(name='Pencil').count()
# все товары кроме указанных
car_goods = Good.objects.exclude(category__name='car')
exists
()Возвращает булево, если есть хотябы одна запис в выборке
Good.objects.exists()
# True
filter
(**kwargs)Возвращает QuerySet, с записями, которые удовлетворяют условиям
# количесвто записей с имененм Pencil
Good.objects.filter(name='Pencil').count()
# фильтруем товары по названию категории
# в данном случае, будет сделан джоин связанной таблицы
car_goods = Good.objects.filter(category__name='car')
first
()Возвращает первый элемент выборки
Good.objects.filter(name='Pencil').first()
get
()Аналогичен фильтру, только возвращает один элемент таблицы
Возбуждает исключения:
DoesNotExists - если записей не найдено
MultipleObjectsReturned - если найдено несколько записей
py
()Goods.objects.get()
pass
pass
last
()Возвращает последний элемент выборки
Good.objects.filter(name='Pencil').last()
latest
()Возвращает обхект запроса с наибольшим значением параметра указанного поля
order_by
()Сортирует QuerySet
Good.objects.order_by('name')
Good.objects.order_by('name', 'created')
Good.objects.order_by('name', '-created')
Good.objects.order_by('category__name', '-created')
reverse
()Сортирует QuerySet в обратном порядке
Good.objects.order_by('name').reverse()
Good.objects.order_by('name', 'created').reverse()
Good.objects.order_by('name', '-created').reverse()
Good.objects.order_by('category__name', '-created').reverse()
contains - значение поля должно содержать указанное нами
endswith - значение поля должно заканчиваться на указанное нами
day - значение поля должно быть равно указанному числу
exact - значение поля должно быть равно указанному
gt - значение поля должно быть больше указанного
gte - значение поля должно быть больше или равно указанному
hour - значение поля должно быть равно указанному часу
icontains - значение поля должно содержать указанное нами, без учета регистра
iendswith - значение поля должно заканчиваться на указанное нами, без учета регистра
iexact - значение поля должно быть равно указанному, без учета регистра
in - значение поля должно быть равно одному из указанных
Good.objects.filter(category__name__in=['car', 'house'])
isnull - булево, значение поля должно содержать значение
istartswith - значение поля должно начинаться с указанного нами, без учета регистра
lt - значение поля должно быть меньше указанного
Good.objects.filter(created__lt=now)
lte - значение поля должно быть меньше или равно указанному
minute - значение поля должно быть равно указанной минуте
month - значение поля должно быть равно указанному месяцу
range - значение поля должно лежать в указанном диапазоне
Good.objects.filter(created__range=(tomorrow, now))
startswith - значение поля должно начинаться с указанного нами
second - значение поля должно быть равно указанной секунде
year - значение поля должно быть равно указанному году
Good.objects.filter(created__year=now.year)
week_day - значение поля должно быть равно указанному дню недели
>>> from django.db.models import F
Объект позволяет ссылаться на значение модели
Good.objects.filter(created__lt=F('modified'))
Критерии фильтрации
from django.db.models import Q
# записи, исключая по фильтру
Good.objects.filter(~Q(created__lt=now))
# записи по дате или категории
Good.objects.filter(
Q(created__lt=date) |
Q(category__name='car'))
# записи по дате и категории
Good.objects.filter(
Q(created__lt=date) &
Q(category__name='car'))
Как склеить два QuerySet
# плохо
recent = list(posts) + list(comments)
# хорошо
from itertools import chain
recent = chain(posts, comments)