2013-11-04 81 views
1

我正在试验django-tables2。我创建了一个测试网站,显示一列日期(由timezone.now()创建)。默认情况下,日期的排列顺序为最旧 - >最新。如果我点击列标题,日期将以相反的顺序显示(所需的默认行为)。Django:django-tables2更改默认排序行为

我玩过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->旧的?

回答

3

只需在列名前加上'-'即可颠倒顺序。您可以在初始化表格时提供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

+0

,对于没有工作我:( –

+0

我的歉意。我修改了答案,它应该符合你的需求。 –

+0

谢谢,工作s完美:) –

0

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

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

或直接用表对象:

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

我试过了你的建议,但没有奏效。它看起来像我必须指定实际的变量名'-order_date'而不是'-Order Date'。 –

+0

那么,你应该编辑你的问题,然后,你指定列名是“Order Date”,显然你的模型中有“order_date”属性... – jbub

+1

我的意思是“列”,就像浏览器呈现的内容一样。很明显,我不能在变量名中使用空格。 –