我有一个查询集,我想根据label
字段的自定义排序进行排序。
这是我必须对标签进行适当排序的功能:
def sort_question_labels(labels):
def num_split_test(string):
key = "".join([s for s in itertools.takewhile(lambda x: x.isdigit(), list(string))])
try:
return int(key)
except:
return key
def str_split_test(string):
num_part_len = len(str(num_split_test(string)))
return string[num_part_len:]
labels2 = sorted(labels, key=str_split_test)
return sorted(labels2, key=num_split_test)
因此sort_question_labels(['a', '1', '11', '1a', '6f', '6', '6a'])
会返回['1', '1a', '6', '6a', '6f', '11', 'a']
。
在管理员中,我尝试根据question
字段对label
模型的查询集进行排序。我想按照以下方式做点什么:
def get_queryset(self, request):
qs = super(MultQAdmin, self).get_queryset(request)
return qs.distinct() \
.annotate(sort_num = sort_question_labels('label')) \
.order_by('sort_num')
但是显然这远远不够。我可以根据需要重写sort函数以适应所需的格式。