使用字段值上的函数对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中陷入内存排序的困境。