Я все еще привыкаю к представлениям, основанным на классах, в то время как я достигаю общего назначения, некоторые вещи все еще остаются позади меня.Я следую учебному пособию, которое в основном проведет вас через движения, но, как правило, игнорирует нечеткие детали, такие как этот фрагмент кода:
class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
"""Generic class-based view listing books on loan to current user."""
model = BookInstance
template_name ='books/bookinstance_list_borrowed_user.html'
paginate_by = 1
def get_queryset(self):
return BookInstance.objects.filter(
borrower=self.request.user
).filter(status__exact='o').order_by('due_back')
Я получаю части model, template_name и paginate_by, ониатрибуты класса ListView, но что я не получаю, так это часть get_queryset, где она выполняется?Как видно из кода ниже, он называется нигде.Куда это возвращено?Я предполагаю, что мой первый вопрос можно записать как «Что делают функции в представлениях на основе классов?»
{% extends "base_generic.html" %}
{% block content %}
<h1>Borrowed books</h1>
{% if bookinstance_list %}
<ul>
{% for bookinst in bookinstance_list %}
<li class="{% if bookinst.is_overdue %}text-danger{% endif %}">
<a href="{% url 'book-detail' bookinst.book.pk %}">{{bookinst.book.title}}</a> ({{ bookinst.due_back }})
</li>
{% endfor %}
</ul>
{% else %}
<p>There are no books borrowed.</p>
{% endif %}
Итак, две проблемы: во-первых, куда вернулся get_queryset, и во-вторых, что такое bookinstance_list?Это не контекстная переменная, но кажется, что она используется совершенно неожиданно, почему эта переменная может использоваться?