gpt4 book ai didi

django - 如何按外部值对Django QuerySet进行排序?

转载 作者:行者123 更新时间:2023-12-01 02:30:54 24 4
gpt4 key购买 nike

我有一个由(id,rank)对组成的字典。我想对id执行Django查询,以使结果查询集按等级(降序)排序。

获取查询集很容易:

rankings = {...}
result = MyModel.objects.filter(id__in=rankings.keys())

答案似乎应该包含某种注释,我可以将其用作order_by的一部分,但我不知道该如何到达。

编辑:我忽略了提及我需要将结果作为QuerySet的原因,因为这是asteapie API管道的一部分。

最佳答案

我对Django> 1.10和PostgreSQL> 9.5的解决方案

from django.db.models import Func, Value, IntegerField, CharField
from django.contrib.postgres.fields import ArrayField


class ArrayPosition(Func):
function = 'array_position'

def __init__(self, items, *expressions, **extra):
if isinstance(items[0], int):
base_field = IntegerField()
else:
base_field = CharField(max_length=max(len(i) for i in items))
first_arg = Value(list(items), output_field=ArrayField(base_field))
expressions = (first_arg, ) + expressions
super().__init__(*expressions, **extra)


pk_list = [234,12,23]
queryset = SomeModel.objects.filter(pk__in=pk_list, ...)\
.annotate(ordering=ArrayPosition(pk_list, F('pk'), output_field=IntegerField()))\
.order_by('ordering')

关于django - 如何按外部值对Django QuerySet进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com