Агент наборов запросов
При прямом доступе к соответствующему полю ManyToMany и ReverseForeignKey, возвращайтесь к списку связанных моделей.
Но в то же время он предоставляет подмножество API QuerySet, поэтому вы можете фильтровать, создавать и выбирать связанные модели непосредственно из родительской модели.
!!!Обратите внимание, что по умолчанию открытый файл QuerySet отфильтрован для возврата только модели, связанные с родительской моделью.
1 | |
!!!note Обратите внимание, что при доступе к методу QuerysetProxy к API QuerySet не требуется использовать свойства объекта, как это делается в обычном запросе.
1 2 3 | |
!!!Предупреждение, что запрос связанной модели из ManyToMany приводит к удалению списка связанных моделей, загруженных в родительскую модель:
1 2 3 4 5 6 7 8 9 | |
Чтение данных из базы данных
Получить
get(**kwargs): -> модель
Чтобы получить только одну из связанных моделей, отфильтрованных по имени, можно использовать метод get(**kwargs).
1 2 3 4 5 6 7 8 9 | |
Tip
Получить или создать
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
При попытке получить строку, удовлетворяющую критериям, при возникновении исключения NoMatch создается новая строка с использованием данных kwargs и_defaults.
!!!tip Читать далее в документе get_or_create
Все.
all(**kwargs) -> List[Optional["Model"]]
Для получения списка связанных моделей используйте метод all().
Обратите внимание, что можно фильтровать наборы запросов, выбирать связи, исключать поля и т. д., как и обычные запросы.
1 2 3 4 5 6 7 | |
Tip
Итерация
iterate(**kwargs) -> AsyncGenerator["Model"]
Для итерации связанных моделей используйте метод iterate().
Обратите внимание, что можно фильтровать наборы запросов, выбирать связи, исключать поля и т. д., как и обычные запросы.
1 2 3 | |
Tip
Вставка/обновление данных в базе данных
Создавая
Создание (**kwargs): -> модель
Создайте зависимую модель непосредственно из родительской модели.
Связанные таблицы и идентификаторы связей в базе данных заполняются автоматически.
1 2 3 4 | |
Tip
Для отношений "Много-много", если в явно поставляемой модели объявляются дополнительные поля, имеется дополнительная функция передачи параметров, которая используется для создания сквозной модели.
Приводим такой образец:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
Поле модели можно заполнить в вызове create() следующими способами:
1 2 3 4 5 6 7 | |
Получение или создание
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
При попытке получить строку, удовлетворяющую критериям, при возникновении исключения NoMatch создается новая строка с использованием данного kwargs.
!!!tip Читать далее в документе get_or_create
Обновить или создать
update_or_create(**kwargs) -> Model
Обновление модели или создание новой модели без соответствия в базе данных.
!!!tip Читать больше в файле update_or_create
Обновить
update(**kwargs, each:bool = False) -> int
Обновляет связанную модель с использованием параметров ключевых слов, возвращая обновленное количество строк.
Tip
Обратите внимание на то, что параметры с именами полей и словарями полей также могут быть приняты при обновлении связей "Несколько пар".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
В приведенном выше примере можно обновить свойства postcategory при следующем вызове:
1 2 3 | |
Фильтр и сортировка
Фильтр
filter(*args, **kwargs) -> QuerySet
Позволяет использовать фильтры с учетом FK для фильтрации по любым свойствам/полям модели и получения экземпляров.
Tip
Исключить
exclude(*args, **kwargs) -> QuerySet
Работа точно так же, как и фильтр, и все модификаторы (суффикс) одинаковы, но возвращает условие not.
Tip
Основания для заказа
order_by(columns:Union[List, str]) -> QuerySet
Команда order_by () позволяет сортировать результаты в базе данных по выбранным полям.
!!!tip Читать далее в запросе Order_by
Подключение и подзапросы
Выберите связанные
select_related(related: Union[List, str]) -> QuerySet
Позволяет предварительно извлекать связанные модели в ходе одного запроса.
При использовании select_lated всегда выполняется только один запрос к базе данных, что означает, что создается (иногда сложное) соединение, а последующие вложенные модели обрабатываются в Python.
!!!tip Прочитайте больше о select_lated в документации запроса
Предварительный отбор связан
prefetch_related(related: Union[List, str]) -> QuerySet
Позволяет предварительно извлекать связанные модели во время запроса, но в отличие от select_lated каждая последующая модель извлекается в отдельном запросе базы данных.
При использовании prefetch_lated каждая модель выполняет по одному запросу для базы данных, что означает, что вы выполняете несколько запросов один за другим.
!!!tip Читать далее в файле запроса prefetch_lated
Страницы и строки
Страница страницы
paginate(page: int, page_size: int = 20) -> QuerySet
Комбинированы методы смещения и ограничения на основе номера страниц и размера.
Tip
Ограничения
limit(limit_count: int) -> QuerySet
Можно ограничить результат необходимым количеством родительских моделей.
Tip
Компенсация
offset(offset: int) -> QuerySet
Результат можно компенсировать требуемым количеством главной модели.
Tip
Выбор подгруппы столбцов
Область применения
fields(columns: Union[List, str, set, dict]) -> QuerySet
С помощью fields() можно выбрать подмножество столбцов модели для ограничения нагрузки на данные.
Tip
Исключить поля
exclude_fields(columns: Union[List, str, set, dict]) -> QuerySet
С помощью except_fields () можно выбрать подгруппу столбцов модели, которые будут исключены для ограничения загрузки данных.
!!!tip Узнать больше в документации except_fields
агрегатные функции
Количество
count(distinct: bool = True) -> int
Возвращает количество строк, соответствующих заданному условию (т. е. применение фильтра и исключение)
Tip
Существует
Существование () -> логическое значение
Возвращает логическое значение для подтверждения наличия строки, соответствующей заданному условию (применяется с фильтрами и исключениями)
Tip