Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用字段值上的函数对Django queryset进行排序?_Django_Sorting_Django Queryset - Fatal编程技术网

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

使用字段值上的函数对Django queryset进行排序?,django,sorting,django-queryset,Django,Sorting,Django Queryset,我有一个查询集,我想根据标签字段的自定义顺序进行排序 这是我必须对标签进行适当排序的函数: 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)

我有一个查询集,我想根据
标签
字段的自定义顺序进行排序

这是我必须对标签进行适当排序的函数:

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)
因此
对问题标签进行排序(['a','1','11','1a','6f','6','6a'])
返回
['1','1a','6','6a','6f','11','a']

在管理中,我试图根据
标签
字段对我的
问题
模型的查询集进行排序。我想做以下几点:

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')

虽然这显然是不正确的。我可以根据需要重写排序函数,以适应所需的任何格式。

我不希望按字段排序的可能重复项。我已经看过了
.extra(order_by…
,但这只适用于数据库字段,而不适用于方法。queryset中的排序发生在数据库中,因此不能使用任意Python方法进行排序。如果您可以在数据库中计算出您的订购标准,则链接的答案或链接到该答案的其他答案之一应显示如何使用
extra
来执行此操作。否则,您可能会在Python中陷入内存排序的困境。