【发布时间】:2016-12-05 19:52:12
【问题描述】:
我有一个模型的版本字段,一个字符串字段。我通过该字段(“-version”)定义了我的 Django 管理员排序。
问题是 python 的版本比较在字符串方面不起作用。例如:
vers=['5.10.0.','5.9.0','5.8.0']
vers[0]>vers[1]
>>False
应该是真。
如何在不更改模型的情况下编写自定义排序?
我看到了this question,但它只适用于聚合函数。
注意:我需要 ordering 的解决方案,而不是 list_filter,我已经有了答案 here。我将查找更改如下:
def lookups(self, request, model_admin):
qs = model_admin.queryset(request)
vers = qs.values_list('version', flat=True).distinct().order_by('-version')
s_vers = [tuple([int(x) for x in n.split('.')]) for n in vers]
s_vers = sorted(s_vers, reverse=True)
ns_vers = ['.'.join(map(str, x)) for x in s_vers]
ret_vers = []
for v in ns_vers:
ret_vers.append((v, v))
return ret_vers
【问题讨论】:
-
我认为这在 django admin 中是不可能的。排序取决于模型字段,以及它们值之间的标准比较。无法使用如此复杂的比较来应用排序。
标签: python django django-admin django-filter