Как получить все записи связанных объектов по многим связанным полям в 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 %}