отображать имена полей модели в Django - PullRequest
0 голосов
/ 01 октября 2018

В моем списке просмотра я хочу отобразить несколько полей из двух моделей, содержащих поле «многие ко многим».Я могу отобразить правильные значения из одной таблицы, но затем не могу получить доступ к другой таблице с полем «многие ко многим».

Models.py

class Books(models.Model):
    title = models.CharField(max_length=100)

class Author(models.Model):

    book = models.ManyToManyField(Books)
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=200)

Views.py

class BooksListView(ListView):
    context_object_name = 'booklist'
    model = Author 
    template_name = 'Books/books_list.html'

Book_list.html

{% for books in booklist %}
    <h5><li class="list-group-item list-group-item-light"">
    {{books.book.all}}:{{books.first_name}} {{books.last_name}}</li></h5>
{% endfor %}

Имя и фамилия отображаются правильно, но books.book.all () я знаю, что это неправильный запрос) возвращает набор запросов, содержащий заголовок (это то, что мне нужно, но это в формате <QuerySet [<Books: Book Title>]>. Но books.book.title, кажется, не работает. То, что я хочу отобразить, это «booktitle - имя фамилия», и, поскольку я использую две таблицы, мне нужноотношения многие ко многим. Есть мысли?

1 Ответ

0 голосов
/ 01 октября 2018

Отношение «многие ко многим» идет в обе стороны, поэтому вам не нужно основывать все вокруг авторов.

class BooksListView(ListView):
    context_object_name = 'booklist'
    model = Book 
    template_name = 'Books/books_list.html'

И шаблон:

{% for books in booklist %}
    <li class="list-group-item list-group-item-light">
        <h5>{{ book.title }}</h5>
        <p>
        {% for author in book.author_set.all %}
        {{ author.first_name }} {{ author.last_name }}{% if not forloop.last %}, {% endif %}
        {% endfor %}
        </p>
    </li>
{% endfor %}

Примечания:

  • По умолчанию related_name равно {{ModelName}}_set (author_set в данном случае).Если вы хотите что-то более естественное, вы можете установить related_name='authors'.
  • Для каждой книги в списке будет сделан запрос к базе данных, и это может быть довольно медленным с большим количеством данных, поэтому посмотритев prefetch_related().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...