django-tables2中表的自定义排序
我有一个带有django-tables2的表,在一个带有django过滤器的站点上。我正在使用的django-tables2中表的自定义排序,django,django-filter,django-tables2,Django,Django Filter,Django Tables2,我有一个带有django-tables2的表,在一个带有django过滤器的站点上。我正在使用的PagedFilteredTableView如下所示: class PagedFilteredTableView(SingleTableView): filter_class = None formhelper_class = None context_filter_name = 'filter' def get_queryset(self, **kwargs):
PagedFilteredTableView
如下所示:
class PagedFilteredTableView(SingleTableView):
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_context_data(self, **kwargs):
context = super(PagedFilteredTableView, self).get_context_data()
context[self.context_filter_name] = self.filter
return context
class PageTable(Table):
column_name = Column(verbose_name='ID')
def order_column_name(self, queryset, is_descending):
return sorted(queryset, key=lambda q: natural_sort_key(q.column_name)), True
这是一种观点:
def sorted_str_number(str):
return int(str)
class PageList(PagedFilteredTableView):
model = Page
table_class = PageTable
filter_class = PageListFilter
formhelper_class = PageListFormHelper
pagination = {
'20': 20,
'50': 50,
'100': 100,
}
def get_table_class(self):
klass = super().get_table_class()
if 'pagination' in self.request.GET:
klass._meta.per_page = int(self.request.GET['pagination'])
return klass
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['per_page_table'] = sorted(self.pagination.keys(), key=sorted_str_number)
return context
我需要实现一个列。我想我可以像这样重写tables.py中的行为:
class PagedFilteredTableView(SingleTableView):
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_context_data(self, **kwargs):
context = super(PagedFilteredTableView, self).get_context_data()
context[self.context_filter_name] = self.filter
return context
class PageTable(Table):
column_name = Column(verbose_name='ID')
def order_column_name(self, queryset, is_descending):
return sorted(queryset, key=lambda q: natural_sort_key(q.column_name)), True
但是order\u column\u name方法被忽略。当使用django-tables2
和django-filter
时,我应该在哪里覆盖一个字段的自定义排序?引用您链接到的文档:
添加Table.order\u FOO
方法(其中FOO
是列的名称),可以在选择对该列进行排序时链接到或修改原始查询集
您要做的是在python中对queryset进行排序,如果您首先将queryset转换为一个列表,这可能会起作用,但现在看起来您将它混合得太多了
也就是说,order\u列\u name
被忽略。它叫什么名字?如果我尝试重新构建您的示例(剥离过滤内容),我会得到错误,但正在调用该方法。引用您链接到的文档:
添加Table.order\u FOO
方法(其中FOO
是列的名称),可以在选择对该列进行排序时链接到或修改原始查询集
您要做的是在python中对queryset进行排序,如果您首先将queryset转换为一个列表,这可能会起作用,但现在看起来您将它混合得太多了
也就是说,您说忽略了order\u列\u name
。是否调用了它?如果我尝试重新构建您的示例(剥离过滤内容,我会出错,但正在调用该方法。我认为您可以进一步缩小您的问题范围,您的问题是关于django-tables2中的自定义排序,以便您可以删除所有过滤内容。另外:您使用的是django-tables2的哪个版本?@Jieter django-tables2==1.1.6此功能是的,我检查过了当你问我使用的是什么版本时,我很抱歉,谢谢你的帮助!我想你可以进一步缩小你的问题范围,你的问题是关于django-tables2中的自定义排序,这样你就可以删除所有的过滤内容。另外:你使用的是什么版本的django-tables2?@Jieter django-tables2==1.1.6这个功能是的,我在你问我使用的是什么版本。很抱歉,谢谢你的帮助!我在表中添加了column\u name
作为参数。它没有被调用,我在那里添加了print语句,我在runserver
的输出中看不到它,但它确实呈现了一个表,其中有一列名为column\u name
?是的,列是可排序的(默认排序,非自然排序)。可能是django筛选器覆盖了排序?嗯,看起来我使用的是没有order\u FOO
支持的旧版本?现在只支持查询集的自定义排序,请参阅我在表中添加了column\u name
作为参数。它没有被调用,我在那里添加了print语句,我在runserver
的输出中看不到它,但它确实存在es呈现一个表,该表有一个名为column\u name
的列?是的,并且该列是可排序的(默认排序,不是自然排序)。可能是django筛选器覆盖了排序?嗯,看起来我使用的是旧版本,不支持order\u FOO
吗?现在只有查询集支持自定义排序,请参阅