Как выполнить следующее задание в django orm
У меня есть две модели. одна - Автор, другая - Книга. у автора может быть несколько книг. поэтому id автора является внешним ключом. и у меня есть следующие данные.
Авторская таблица
id | Author Name |
---|---|
1 | Tom |
Таблица книг
id | Author | Book Name |
---|---|---|
1 | 1 | rescue a person |
2 | 1 | be a doctor |
Я хочу создать функцию для получения следующего результата при запросе записи автора.
id | author name | books name |
---|---|---|
1 | Tom | rescue a person, be a doctor |
для one2many и M2M используется prefetch_related
:
from django.db.models import Prefetch
author = Author.objects.filter(pk=1).prefetch_related(Prefetch('book_set',to_attr='books'))
теперь в author[0].books
приведены книги автора. ref
Если вы хотите избежать последующих запросов при итерации по набору запросов, достаточно ответа @Amin Mir.
.
Если вам нужно, чтобы данные агрегировались внутри вашего набора запросов, вам следует взглянуть на:
ArrayAgg для Postgres: https://docs.djangoproject.com/en/4.1/ref/contrib/postgres/aggregates/#arrayagg
.GroupConcat для MySQL и MariaDB:
https://django-mysql.readthedocs.io/en/latest/aggregates.html#django_mysql.models.GroupConcat
Пример GroupConcat doc должен помочь вам с синтаксисом