Как получить все записи связанных объектов по многим связанным полям в Django с помощью одного запроса

class Author(models.Model):
    name = models.CharField(max_length=50)

class Chapter(models.Model):
    book = models.ForeignKey(Album, on_delete=models.CASCADE)
    author = models.ManyToManyField("Author")

class Book(models.Model):
    author = models.ManyToManyField("Author")

Я могу получить Author.objects.get(id=1).chapter_set.all() и добавить автора каждой главы к List но как я могу достичь этого запросом в Django

Если вам нужен просто список всех авторов во всех главах, используйте:

Chapter.objects.all().values_list("author", flat=True)

Если вы хотите отфильтровать главы с определенным автором, вы можете использовать:

Chapter.objects.filter(author=author_id).values_list("author", flat=True)

вы можете следовать этому.

Для получения данных в python вы можете использовать такой способ.

fetch = Chapter.objects.all()

#and then for fetch the author
for chapter in fetch:
    author_fetch = chapter.author.all()
    #and now you can access the all data from author
    print(author_fetch[0].name)

а для отображения данных в html не нужно вызывать author_fetch. вы можете напрямую вызвать его в html. Вот пример

{% for chapter in object_list %} 
  
  {% for author in chapter.author.all %} 
     {{author.name}} 
  {% endfor %}

{% endfor %}
Вернуться на верх