Есть 2 одинаковых набора запросов в контексте для ListView

Мне интересно, почему в контексте есть 2 одинаковых набора запросов: object_list и massage_list. Может я что-то не так делаю? Я смог найти massage_list только в урлах path('work/', MassageListView.as_view(), name='massage_list')

class MassageListView(ListView):
    def get_queryset(self):
        return Massage.objects.filter(time_of_receipt__year=now().year,
                                   time_of_receipt__month=now().month)

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(MassageListView, self).get_context_data(**kwargs)
        month_salary = 0
        for i in context['object_list']:
            month_salary += i.price
        context['month_salary'] = month_salary
        context['form'] = MassageForm()
        print(context)
        return context

печатный контекст

{'paginator': None, 'page_obj': None, 'is_paginated': False, 'object_list': <QuerySet [<Massage: 2021-08-11 12:00:00+00:00>, <Massage: 2021-08-14 12:00:00+00:00>]>, 'massage_list': <QuerySet [<Massage: 2021-08-11 12:00:00+00:00>, <Massage: 2021-08-14 12:00:00+00:00>]>, 'view': <myapp.views.MassageListView object at 0x7f2e166200a0>, 'month_salary': 13800, 'form': <MassageForm bound=False, valid=Unknown, fields=(client;price;count;time_of_receipt)>}

Я нашел этот метод в MultipleObjectMixin, который наследуется BaseListView.

    def get_context_object_name(self, object_list):
        """Get the name of the item to be used in the context."""
        if self.context_object_name:
            return self.context_object_name
        elif hasattr(object_list, 'model'):
            return '%s_list' % object_list.model._meta.model_name
        else:
            return None

Как видно, этот метод возвращает строку [model_name]_list, которая в дальнейшем используется в методе get_context_data наряду с object_list.

    def get_context_data(self, *, object_list=None, **kwargs):
        """Get the context for this view."""
        queryset = object_list if object_list is not None else self.object_list

        ...       

        context_object_name = self.get_context_object_name(queryset)

        ...   

        if context_object_name is not None:
            context[context_object_name] = queryset

        ...   

        return context

Но не волнуйтесь, это одни и те же объекты.

Однако странно, что это недокументированная возможность.

Вернуться на верх