Django:django-tables2更改默认排序行为

时间:2013-11-04 16:14:49

标签: python django django-tables2

我正在尝试使用django-tables2。我创建了一个显示日期列的测试网站(由timezone.now()创建)。默认情况下,日期排序为Oldest-> Newest。如果单击列标题,日期将以相反的顺序显示(所需的默认行为)。

我已经使用了order_by论证,但我做错了什么。我的tables.py:

class OrderTable(tables.Table):
    order_date = tables.Column(order_by=("Order Date",))

我的views.py:

def index(request):
    table = OrderTable(Order.objects.all())
    RequestConfig(request, paginate={"per_page": 10}).configure(table)
    return render(request, 'orders_app/index.html', {'table': table})

如何订购"订单日期"列,因此它显示为Newest-> Oldest?

2 个答案:

答案 0 :(得分:4)

只需在列名前添加'-'前缀即可撤销订单。您可以在初始化表格时提供order_by

def index(request):
    table = OrderTable(Order.objects.all(), order_by="-order_date")
    RequestConfig(request, paginate={"per_page": 10}).configure(table)
    return render(request, 'orders_app/index.html', {'table': table})

请参阅order_by

  

默认排序。例如('name', '-age')。连字符-可用于为列名添加前缀以指示降序。

另请参阅specifying alternative ordering for a column

答案 1 :(得分:0)

您可以像这样设置查询集的排序:

table = OrderTable(Order.objects.order_by('-Order Date'))

或直接使用表格对象:

table = OrderTable(Order.objects.all())
table.order_by = '-Order Date'