Python 使用django过滤器和django-table2的CBV

Python 使用django过滤器和django-table2的CBV,python,django,django-filter,django-tables2,Python,Django,Django Filter,Django Tables2,我想将django-table2与django过滤器一起使用。我按照django-table2文档所说的做了,但django过滤器的形式并没有显示在我的模板中 这是我的密码: #Views.py 从django_filters.views导入FilterView 导入django_过滤器 从django_表2导入SingleTableView 类MYFilter(django_filters.FilterSet): 类元: model=MyModel 字段=['field1','field2']

我想将django-table2与django过滤器一起使用。我按照django-table2文档所说的做了,但django过滤器的形式并没有显示在我的模板中

这是我的密码:

#Views.py
从django_filters.views导入FilterView
导入django_过滤器
从django_表2导入SingleTableView
类MYFilter(django_filters.FilterSet):
类元:
model=MyModel
字段=['field1','field2']
类MyView(SingleTableView、FilterView):
model=MyModel
table\u class=MyTable
template\u name='my\u template.html'
filterset_class=MYFilter
#tables.py
将django_表2导入为表
类MyTable(tables.Table):
类元:
model=MyModel
字段=(“字段1”、“字段2”)
#my_template.html
{%load render_Tables from django_Tables 2%}
{%if筛选器%}
{{filter.form.as_p}
{%endif%}
{%if表%}
{%render_table%}
{%endif%}

表格渲染正确,但窗体未渲染。我的代码有什么问题?

正如@willem van onsem所说,您使用了两个
基类。因此,您必须更改这一行:

class MyView(SingleTableView, FilterView):
为此:

class MyView(SingleTableMixin, FilterView):

您可以在这里看到
django-table2
文档以供使用
django过滤器

正如@willem van onsem所说,您使用了两个
基类
。因此,您必须更改这一行:

class MyView(SingleTableView, FilterView):
为此:

class MyView(SingleTableMixin, FilterView):
您可以在这里看到
django-table2
供使用的文档
django filter

方法解析顺序(MRO)将使filter视图降低到没有影响的程度,实际上:

>>> MyView.__mro__
(<class 'MyView'>,
 <class 'django_tables2.views.SingleTableView'>,
 <class 'django_tables2.views.SingleTableMixin'>,
 <class 'django_tables2.views.TableMixinBase'>,
 <class 'django.views.generic.list.ListView'>,
 <class 'django_filters.views.FilterView'>,
 <class 'django.views.generic.list.MultipleObjectTemplateResponseMixin'>,
 <class 'django.views.generic.base.TemplateResponseMixin'>,
 <class 'django.views.generic.list.BaseListView'>,
 <class 'django_filters.views.BaseFilterView'>,
 <class 'django_filters.views.FilterMixin'>,
 <class 'django.views.generic.list.MultipleObjectMixin'>,
 <class 'django.views.generic.base.ContextMixin'>,
 <class 'django.views.generic.base.View'>,
 <class 'object'>)
mro是:

>>> MyView.__mro__
(<class 'MyView'>,
 <class 'django_filters.views.FilterView'>,
 <class 'django_tables2.views.SingleTableView'>,
 <class 'django_tables2.views.SingleTableMixin'>,
 <class 'django_tables2.views.TableMixinBase'>,
 <class 'django.views.generic.list.ListView'>,
 <class 'django.views.generic.list.MultipleObjectTemplateResponseMixin'>,
 <class 'django.views.generic.base.TemplateResponseMixin'>,
 <class 'django_filters.views.BaseFilterView'>,
 <class 'django_filters.views.FilterMixin'>,
 <class 'django.views.generic.list.BaseListView'>,
 <class 'django.views.generic.list.MultipleObjectMixin'>,
 <class 'django.views.generic.base.ContextMixin'>,
 <class 'django.views.generic.base.View'>,
 <class 'object'>)
>>MyView.\uu mro__
(,
,
,
,
,
,
,
,
,
,
,
,
,
,
)
因此,将使用
BaseFilterView
get
逻辑。

方法解析顺序(MRO)将使过滤器视图降低到没有影响的程度,实际上:

>>> MyView.__mro__
(<class 'MyView'>,
 <class 'django_tables2.views.SingleTableView'>,
 <class 'django_tables2.views.SingleTableMixin'>,
 <class 'django_tables2.views.TableMixinBase'>,
 <class 'django.views.generic.list.ListView'>,
 <class 'django_filters.views.FilterView'>,
 <class 'django.views.generic.list.MultipleObjectTemplateResponseMixin'>,
 <class 'django.views.generic.base.TemplateResponseMixin'>,
 <class 'django.views.generic.list.BaseListView'>,
 <class 'django_filters.views.BaseFilterView'>,
 <class 'django_filters.views.FilterMixin'>,
 <class 'django.views.generic.list.MultipleObjectMixin'>,
 <class 'django.views.generic.base.ContextMixin'>,
 <class 'django.views.generic.base.View'>,
 <class 'object'>)
mro是:

>>> MyView.__mro__
(<class 'MyView'>,
 <class 'django_filters.views.FilterView'>,
 <class 'django_tables2.views.SingleTableView'>,
 <class 'django_tables2.views.SingleTableMixin'>,
 <class 'django_tables2.views.TableMixinBase'>,
 <class 'django.views.generic.list.ListView'>,
 <class 'django.views.generic.list.MultipleObjectTemplateResponseMixin'>,
 <class 'django.views.generic.base.TemplateResponseMixin'>,
 <class 'django_filters.views.BaseFilterView'>,
 <class 'django_filters.views.FilterMixin'>,
 <class 'django.views.generic.list.BaseListView'>,
 <class 'django.views.generic.list.MultipleObjectMixin'>,
 <class 'django.views.generic.base.ContextMixin'>,
 <class 'django.views.generic.base.View'>,
 <class 'object'>)
>>MyView.\uu mro__
(,
,
,
,
,
,
,
,
,
,
,
,
,
,
)

因此,将使用
BaseFilterView
get
逻辑。

您使用两个基类,因此
SingleTableView
很可能从不调用
FilterView
super()
视图来“注入”
过滤器。那么,我可以做些什么来解决这个问题呢@WillemVanonSem您使用两个基类,很可能是
SingleTableView
,从不调用
FilterView
super()
视图来“注入”
过滤器。那么,我能做些什么来解决这个问题呢@威廉·瓦农森