问题描述
我想将django-table2与django-filter一起使用。 我完成了django-table2文档所说的操作,但模板中未显示django-filter的形式
这些是我的代码:
# Views.py
from django_filters.views import FilterView
import django_filters
from django_tables2 import SingleTableView
class MYFilter(django_filters.FilterSet):
class Meta:
model = MyModel
fields = ['field1','field2' ]
class MyView(SingleTableView,FilterView):
model = MyModel
table_class = MyTable
template_name = 'my_template.html'
filterset_class = MYFilter
# tables.py
import django_tables2 as tables
class MyTable(tables.Table):
class Meta:
model = MyModel
fields = ("field1","field2",)
# my_template.html
{% load render_table from django_tables2 %}
{% if filter %}
<form method="get">
{{ filter.form.as_p }}
<input type="submit" />
</form>
{% endif %}
{% if table %}
<div class="table-responsive">
{% render_table table %}
</div>
{% endif %}
解决方法
正如@ willem-van-onsem所说,您使用两个baseclasses
。因此,您必须更改此行:
class MyView(SingleTableView,FilterView):
对此:
class MyView(SingleTableMixin,FilterView):
在此link中,您可以看到django-table2
个django-filter
文件供使用。
方法解析顺序(MRO)将过滤器视图设置得很低,以至于没有影响,
IntStream.range(0,test.size()).map(i -> test.get(i).get(i)).sum();
这很重要,因为>>> 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'>)
将覆盖BaseFilterView
方法,但是由于get
首先出现在MRO中,因此不会产生任何影响。如果我们交换父母,那么:
BaseListView
MRO是:
class MyView(FilterView,SingleTableView):
# …
,因此将使用>>> MyView.__mro__
(<class 'MyView'>,<class 'django_tables2.views.SingleTableView'>,<class 'object'>)
的{{1}}逻辑。