使用字段值的函数对Django queryset进行排序?

时间:2014-09-17 18:20:14

标签: django sorting django-queryset

我有一个查询集,我想根据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函数以适应所需的格式。

0 个答案:

没有答案