django-tables2中表的自定义排序

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):

我有一个带有django-tables2的表,在一个带有django过滤器的站点上。我正在使用的
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
吗?现在只有查询集支持自定义排序,请参阅