Создание сайта на Django: Урок 16, методы QuerySet в Django ORM
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Руководства «Django»
Комментариев: 0

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

Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)