【问题标题】:django-tables2 sorting non-queryset datadjango-tables2 对非查询集数据进行排序
【发布时间】:2018-02-09 02:47:05
【问题描述】:

您好,我有一张桌子:

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 列数据。任何帮助表示赞赏!我想我需要在我的tables.Column 中指定order_by 参数,但还没有找到正确的设置。

【问题讨论】:

    标签: python django django-tables2


    【解决方案1】:

    data.sort(key = lambda item: item["brand"].lower()) 将根据品牌(按字母顺序)对列表进行适当的排序(因此它将返回 None;原始的“数据”列表已被编辑)。任何键都可以这样做。

    或者,sorted(data, key = lambda item: item["brand"].lower()) 返回列表的排序副本。

    【讨论】:

    • 我应该把这段代码放在哪里,在表中还是在视图中?
    • 将信息作为列表获取后,将列表插入此代码:)
    • 还有知道为什么Column 对象支持对日期时间对象和非字符串值进行本地排序,但不支持字符串?
    • (其中数据是列表)
    • 不,我不熟悉 django
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 2017-07-15
    • 1970-01-01
    • 2012-12-20
    • 2014-04-12
    • 2020-04-16
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多