Django запрос в существующем формате - PullRequest
1 голос
/ 20 июня 2020

У меня есть модель, как показано ниже

class Books(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    name = models.CharField(null=True, blank=True)

Как запросить, который вернет

author1 - Book 1
       - Book 2
       - Book 3
author2 - Book4
        - Book5

1 Ответ

1 голос
/ 20 июня 2020

Запрос к реляционной базе данных не работает с иерархией . Он всегда возвращает «плоские записи».

Однако вы можете получить записи и затем отрендерить их соответствующим образом, поэтому:

def my_view(reques):
    authors = Author.objects.<b>prefetch_related('books_set')</b>
    return render(request, 'name-of-template.html', {'authors': authors})

тогда в шаблоне мы можем, например, отрендерить это с помощью :

<!-- name-of-template.html -->
<ul>
{% for author in <b>authors</b> %}
    <li>{{ author }}</li>
    <ul>
    {% for book in <b>author.books_set.all</b> %}
        <li>{{ book.name }}</li>
    {% endfor %}
{% endfor %}
</ul>

Примечание : обычно модели Django дается единственное имя, поэтому Book вместо Books.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...