默认情况下,禁用django_tables2表的排序

ezd*_*ena 3 django django-orm django-tables2

我使用django_tables2呈现我的表。对于一张表,我只想查看最近的5个条目。因此,我需要在将查询集传递给表对象之前对其进行排序:

qset = myObject.objects.order_by('-start_time').all()[:5]
table = MyTableClass(qset, template='path/to/template.html')
Run Code Online (Sandbox Code Playgroud)

这将产生以下错误消息:

AssertionError: Cannot reorder a query once a slice has been taken.
Run Code Online (Sandbox Code Playgroud)

我可以orderable=False为每个设置django_tables.Column,但是由于MyTableClass继承自另一个表类,因此我想避免这种情况。

提前致谢

ezd*_*ena 5

来自:http : //django-tables2.readthedocs.io/en/latest/pages/api-reference.html#table-meta

orderable(布尔型):列的orderable属性的默认值。

如果表和列未指定值,则列的可排序值将回退到该值。这提供了一种简单的机制来禁用整个表的排序,而无需向表中的每一列添加orderable = False。

所以这解决了我的问题:

class MyTableClass(django_tables2.Table):
    class Meta:
        orderable = False
    ...
Run Code Online (Sandbox Code Playgroud)

更新: 正如@Jieter在评论中提到的那样,将其作为参数传递也应该起作用(没有检查):

table = MyTable(data, orderable=False)
Run Code Online (Sandbox Code Playgroud)