【发布时间】:2014-10-05 01:07:07
【问题描述】:
我正在尝试使用 Django 1.6 中最常见/标准/推荐的方法创建具有分页、排序和过滤功能的表格视图。这似乎是基于类的通用视图和 django-tables2。我发现了至少两个不同的如何添加过滤的例子,一个是django-filters and crispy-forms,另一个是django_filters,但都没有一个完整的工作示例。当我采用任何一种方法时,我都无法填写缺失的材料。使用 Nicolas Kuttler 的脆皮方法,我有:
models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
tables.py
import django_tables2 as dt2
from .models import Author
class AuthorTable(dt2.Table):
class Meta:
model = Author
如果我理解正确,PagedFilteredTableView 是一个泛型类,然后我将其子类化为 AuthorView,与另一个示例相反,我认为 FilteredSingleTableView 应该被理解为,如果 Author 是表,AuthorFilteredSingleTableView .
views.py
from .tables import AuthorTable
from .models import Author
from django_tables2 import SingleTableView
class PagedFilteredTableView(SingleTableView):
"""
Generic class from http://kuttler.eu/post/using-django-tables2-filters-crispy-forms-together/
which should probably be in a utility file
"""
filter_class = None
formhelper_class = None
context_filter_name = 'filter'
def get_queryset(self, **kwargs):
qs = super(PagedFilteredTableView, self).get_queryset()
self.filter = self.filter_class(self.request.GET, queryset=qs)
self.filter.form.helper = self.formhelper_class()
return self.filter.qs
def get_table(self, **kwargs):
table = super(PagedFilteredTableView, self).get_table()
RequestConfig(self.request, paginate={'page': self.kwargs['page'],
"per_page": self.paginate_by}).configure(table)
return table
def get_context_data(self, **kwargs):
context = super(PagedFilteredTableView, self).get_context_data()
context[self.context_filter_name] = self.filter
return context
class AuthorTableView(PagedFilteredTableView):
model = Author
table_class = AuthorTable
paginate_by = 30
filter_class = AuthorFilter
formhelper_class = AuthorFilterFormHelper
这是,除了模板,源代码中的所有示例代码,manage.py 抱怨未定义 AuthorFilter,所以我猜这会进入......也许是 filters.py?
filters.py
import django_filters as df
from .models import Author
class AuthorFilter(df.FilterSet):
class Meta:
model = Author
然后,回到views.py,from .filters import AuthorFilter。
现在AuthorFilterFormHelper 没有定义,不清楚这是否是我应该明确定义的(如何?),正如formhelper_class = FooFilterFormHelper 行所暗示的那样,或者实际上应该以某种方式自动完成,正如暗示的那样通过self.filter.form.helper = self.formhelper_class()。而且我们还没有找到 urls.py 或模板。请帮助填写空白,或指出一条更好的路径,以将过滤添加到基于通用类的视图中。
【问题讨论】:
标签: django django-class-based-views django-tables2 django-filter