Django: выборка данных

Является обязательным знать и понимать, как создаются и обновляются записи в Базе Данных.

Для выбора всех записей из модели News, достаточно лишь записать в переменную

news = News.objects.all()

Этот вызов транслирует следующую SQL-команду:

SELECT id, caregory, title, body FROM news;

Примечание:

При выборке Django не употребляет команду SELECT * , а всегда перечисляет все поля явно.

Рассмотрим отдельные части выражения:

News.objects.all()

News - это наша модель, в которой имеются поля title, body и category;

objects - это атрибут, который отвечает за операции "уровня таблицы" (в том числе выборку данных) и называется менеджером;

метод all() - метод менеджера objects, который возвращает все строки таблицы базы данных. Этот объект является экземпляром класса QuerySet.

Однако выводить все записи из таблицы приходится редко, и иногда данные нужно фильтровать:

News.objects.filter(category='IT')

Метод filter() принимает аргументы, которые затем транслируется в предложение WHERE SQL-команды SELECT.

Допустимо, так же, передать несколько аргументов.

News.objects.filter(category='IT', title='python')

В некоторых случаях удобнее было бы выбрать всего лишь один объект, для этого используется метод get():

News.objects.get(title='python')

Выполняя предыдущие примеры, мы не сказали, как упорядочить результаты. Для этого используется метод order_by():

News.objects.order_by('title')

Таким образом результат будет отсортирован в алфавитном порядке. Сортировать можно по любому полю и нескольким полям(второе поле устраняет неоднозначность в случае первого).

Допускается также изменить порядок сортировки на противоположенный, поставив перед именем поля знак `-`:

News.objects.order_by('-title')

Так же Django позволяет задать порядок сортировки по умолчанию прямо в модели. Для этого используется концепция: class Meta, который принимает аргумент ordering. Подробнее о class Meta вы можете узнать в документации.