嗨,我有一张桌子:
class MyTable(tables.Table):
brand = tables.Column(verbose_name='Brand')
market = tables.Column(verbose_name='Market')
date = tables.DateColumn(format='d/m/Y')
value = tables.Column(verbose_name='Value')
我用list of dicts填充表格然后我正在配置它并以通常的django-tables2方式在我的视图中呈现它:
data = [
{'brand': 'Nike', 'market': 'UK', 'date': <datetime obj>, 'value': 100},
{'brand': 'Django', 'market': 'FR', 'date': <datetime obj>, 'value': 100},
]
table = MyTable(data)
RequestConfig(request, paginate=False).configure(table)
context = {'table': table}
return render(request, 'my_tmp.html', context)
这一切都很好地呈现了表中的正确数据。但是,我可以按网页上的date
列和value
列进行排序,但不能按brand
和market
进行排序。因此,似乎可以对非字符串值进行排序,但字符串不能。我一直试图弄清楚如何进行这种排序,是否可以使用非查询集数据?
我无法使用查询集填充表,因为我使用自定义方法生成value
列数据。任何帮助赞赏!我想我需要在order_by
中指定tables.Column
参数,但尚未找到正确的设置。
答案 0 :(得分:0)
select a.items,
b.items
from (select rn=row_number() over (order by (select 0)) ,items from TableA ) a
full outer join (select rn=row_number()
over (order by (select 0)) ,items from TableB ) b
on a.rn =b.rn
将根据品牌(按字母顺序)对列表进行排序(因此它将返回None;编辑原始“数据”列表)。任何密钥都可以这样做。
或者,data.sort(key = lambda item: item["brand"].lower())
返回列表的已排序副本。