“ProductList”对象没有属性“object_list”

问题描述 投票:0回答:3

在我的

ProductList
课程中,当我尝试在另一种方法中调用
get_context_data
时,出现错误
'ProductList' object has no attribute 'object_list'

def get_context_data(self, **kwargs):
        c = super(ProductList, self).get_context_data(**kwargs)
        c['category'] = self.category
        c['category_menu'] = self.get_category_menu()
        c['filters'] = self.filters
        c['expanded_filters'] = self.get_expanded_filters()
        c['active_filters'] = self.get_active_filters()
        c['category_list'] = self.category.get_children().filter(in_lists=True)
        c['colors_list'] = self.get_colors_list(c['object_list'])
        return c

def get_queryset(self):

    data = self.get_context_data()

导致此错误的原因是什么?

如何在第二种方法中获得

object_list

django python-2.7
3个回答
17
投票

您可能会在超类的get_context_data()中的

line
之后收到错误:

queryset = kwargs.pop('object_list', self.object_list)

get

BaseListView
方法通过调用
object_list
方法在视图上设置
get_queryset

self.object_list = self.get_queryset()

但是,在您的情况下,您在

get_context_data()
方法本身中调用
get_queryset
,并且当时
object_list
未在视图上设置。


4
投票

抱歉问了这么模糊的问题。这只是我第一次尝试 Django。我阅读了一些文档,意识到我实际上可以使用

filter()
:

获取我需要的对象列表
data = self.model.objects.filter(categories__in=self.get_category_menu())

0
投票

您必须从 kwargs 中手动设置

object_list
中的
get_context_data
。 ListView 不支持 POST 请求,因此您必须确保该属性可用。

例如,如果您的

context_object_name
foo


class MyListWithFormView(FormMixin, ListView):

...

def get_context_data(self, **kwargs):

   if kwargs.get('foo'):
      self.object_list = kwargs.get('foo')

   etc...

   return ctx

...

def form_invalid(self, form):

   ctx = self.get_context_data(
      form=form,
      foo=self.get_queryset()
   )

   return self.render_to_response(ctx)

© www.soinside.com 2019 - 2024. All rights reserved.