Django ORM
Django ORM основан на QuerySet. QuerySet — это набор объектов из базы данных, который может использовать фильтры для ограничения, поиска, получения результатов.
Каждая модель Django имеет по крайней мере один менеджер, и менеджер по умолчанию называется objects. Вы можете отправить запрос к объекту (QuerySet) с помощью менеджера моделей.
Чтобы получить все объекты из таблицы, достаточно использовать метод all() в диспетчере объектов по умолчанию:
Получение всех статей из базы данных
all_articles = Article.objects.all()
Это позволяет вам создать QuerySet, который возвращает все объекты базы данных. Но важно отметить, что он еще не выполнен. QuerySet в Django ленив. Они будут работать только в том случае, если они будут применяться. Такое поведение делает инструмент чрезвычайно эффективным. Если вы не храните QuerySet в переменной, а записываете его непосредственно в оболочке Python, оператор SQL в QuerySet будет выполняться автоматически, потому что команда была:
Article.objects.all()
Метод get()
Получить один объект по какому-то полю можно через метод менеджера get():
Article.objects.get(id=1)
Метод filter()
Чтобы отфильтровать QuerySet, вы можете использовать метод менеджера filter(). Например, вы можете получить все статьи за 2021 год с помощью такого запроса:
Article.objects.filter(created_at__year=2021)
Также мы можем фильтровать и по нескольким полям одновременно, например мы хотим в 2021 году найти статьи определенного автора:
Article.objects.filter(created_at__year=2021, author__username='Razilator')
Примечание:
Запросы с методами поиска по полям пишутся с двумя символами подчеркивания, такими как created_at__year, но то же написание используется для доступа к связанным полям модели, таким как author__username.
Метод exclude()
Вы можете исключить некоторые результаты из своего запроса, используя метод менеджера exclude(). Например, вы можете загрузить все сообщения 2021 года, которые не начинаются со слова "Урок":
Article.objects.filter(created_at__year=2021).exclude(title__startswith='Урок')
Метод order_by()
Результаты можно отсортировать по полям с помощью метода менеджера order_by(). Например, вы можете отсортировать все объекты по дате публикации от старых к новым:
Article.objects.order_by('created_at')
Чтобы разместить элементы по убыванию необходимо использовать минус в качестве префикса (от новых к старым):
Article.objects.order_by('-created_at')
Удаление объектов delete()
Если нужно удалить объект, это можно сделать из экземпляра с помощью метода delete():
article = Article.objects.get(id=1)
article.delete()
Примечание:
Обратите внимание, что удаление объектов также удалит все зависимые отношения для объектов ForeignKey, для которых в CASCADE определено on_delete.
Когда исполняется QuerySet
Несколько фильтров можно объединить в QuerySet, но они не будут касаться базы данных, пока QuerySet не будет выполнен. И работает при следующих условиях:
- При первой итерации по QuerySet.
- При получении среза, например Article.objects.all()[:3].
- При сериализации или кэшировании объектов.
- При вызове repr() или len().
- При прямом вызове list().
- При проверке QuerySet в других выражениях, например bool(), or, and или if.
Источник послужил сайт: pythonru.com