reverse()
Делает упорядочивание по умолчанию QuerySet в обратном порядке. Чтобы функция reverse() была использована, модель должна иметь упорядочивание по умолчанию (путем установки ordering в Meta-классе модели). Если модель не упорядочена, то сортировка возвращаемого QuerySet будет бессмысленной.
Кроме того, обратите внимание, что и order_by(), и reverse() не бесплатные операции - они имеют временную стоимость для вашей базы данных и должны использоваться экономно в больших наборах данных.
distinct()
Устраняет дубликаты данных из QuerySet. Создадим еще одного работника, который будет дублировать уже существующего сотрудника.
Теперь если мы выведем всех сотрудников, мы увидим нашего нового работника.
С помощью данного запроса мы можем не выводить сотрудников, у которых повторяются имена.
Employee.objects.all().distinct('first_name')
values()и values_list()
В SQL мы можем использовать SELECT операторы, чтобы ограничить, какие поля возвращаются запросом. В Django мы можем эмулировать это, используя .values()или .values_list().
Оба позволят вам контролировать, какие поля выбираются запросом. .values вернет QuerySet словарей и .values_list QuerySet кортежей.
Employee.objects.filter(id=1).values()
Employee.objects.filter(id=1).values_list()
Также вы можете указать, какие поля хотите вернуть:
Employee.objects.filter(last_name='Doe').values_list('first_name', 'last_name')
dates() и datetimes()
Методы dates() и datetimes() позволяют возвращать из базы данных привязанные к времени записи (например, все события, происходящие в конкретном месяце). Для метода dates() это ограничения времени по году, месяцу, неделе и дню. Для метода datetimes() добавляются ещё и ограничения по часам, минутам и секундам. Например:
Employee.objects.dates('created', 'day')
none()
Вызов none() возвращает пустой набор данных в виде объекта EmptyQuerySet. Одно из использований none() - это когда вы не знаете, будут ли объекты, но не хотите при этом вызвать ошибку.
all()
Возвращает объект QuerySet, который содержит все объекты из таблицы.
union()
Данный метод используется для объединения набора результатов двух или более наборов запросов. Наборы запросов могут быть из одной или разных моделей. Когда наборы запросов относятся к разным моделям, поля и их типы данных должны совпадать.
Попробуем на практике, выберем всех сотрудников, возрастом до 30 лет.
e1 = Employee.objects.filter(age__lte=30)
Теперь в другую переменную, выберем всех сотрудников, возрастом старше 30 лет.
e2 = Employee.objects.filter(age__gte=30)
И теперь мы можем объединить их, с помощью метода union.
e1.union(e2)
Но если мы попробуем
d = Department.objects.all()
e1.union(d)
То получим ошибку: django.db.utils.ProgrammingError: все запросы в UNION должны возвращать одинаковое число столбцов. Операция объединения может быть выполнена только с наборами запросов, имеющими одинаковые поля и типы данных. Следовательно, наша последняя операция объединения столкнулась с ошибкой. Вы можете объединить две модели, если они имеют одинаковые поля или подмножество полей.
Employee.objects.values_list('last_name', 'age').union(Department.objects.values_list('name', 'id'))
Поскольку Employee и Department оба имеют поля одинакового типа, мы можем использовать values_list для ограничения выбранных полей, а затем выполнить объединение.