django-tables2排序非查询集数据

时间:2017-08-31 08:12:33

标签: python django django-tables2

嗨,我有一张桌子:

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列进行排序,但不能按brandmarket进行排序。因此,似乎可以对非字符串值进行排序,但字符串不能。我一直试图弄清楚如何进行这种排序,是否可以使用非查询集数据?

我无法使用查询集填充表,因为我使用自定义方法生成value列数据。任何帮助赞赏!我想我需要在order_by中指定tables.Column参数,但尚未找到正确的设置。

1 个答案:

答案 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())返回列表的已排序副本。