У меня 3 модели - Book
, Page
и Language
.
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
class Page(models.Model):
image = models.ImageField(upload_to='Uploaded_images')
language = models.ForiegnKey(Language, models.CASCADE)
book = models.ForeignKey(Book, models.CASCADE)
class Language(models.Model):
name = models.CharField(max_length=20)
Между объектами Book
и Page
существует отношение один ко многим. Некоторые страницы в книге могут быть на другом языке, поэтому я добавил модель ForeignKey
в Page
, а не модель Book
.
Я хочу получить список всех книг вместе с языками, на которых написаны их страницы.
Я пробовал это:
books = Page.objects.annotate(
name=F('book__title')
).values(
'name', 'book_id'
).distinct(
).annotate(
page_count=Count('id'),
).values(
'name', 'book_id', 'language'
)
Если в книге 2 языка, я получаю 2 записи для одного и того же названия книги. Мне просто нужна 1 запись для книги и я могу показать ее языки в виде списка.
Пример: если есть книга со страницами на любом из двух языков, испанском и английском, я бы хотел извлечь название книги и языки в ней как ['English', 'Spanish'].
Это выполнимо?