Python 使用django过滤器和django-table2的CBV
我想将django-table2与django过滤器一起使用。我按照django-table2文档所说的做了,但django过滤器的形式并没有显示在我的模板中 这是我的密码: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']
#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()
视图来“注入”过滤器。那么,我能做些什么来解决这个问题呢@威廉·瓦农森