gpt4 book ai didi

Django ORM : Perform conditional `order_by`

转载 作者:行者123 更新时间:2023-12-02 18:04:11 26 4
gpt4 key购买 nike

假设有一个简单的模型:

from django.db import models

class Foo(models.Model):
n = models.IntegerField()

在 SQL 中,您可以根据条件执行排序例如

select * from foo orber by n=7, n=17, n=3, n

如果 n 是 7,这将对行进行排序,然后如果 n 是 14,然后如果 n 是 3,然后最后由 n 升序。

如何使用 Django ORM 做同样的事情?它不在他们的 order_by docs 中。 .

最佳答案

您可以使用如下所示的通用解决方案:

from django.db.models import Case, IntegerField, When, Value

items = [7, 17, 3]
Foo.objects.alias(
n_order=Case(
<b>*[When(n=item, then=Value(i)) for i, item in enumerate(items)]</b>,
default=Value(len(items)),
output_field=IntegerField()
)
).order_by('n_order', 'n')

因此构造了一个 conditional expression chain [Django-doc]这是首先使用的,如果 n 不是其中之一,它将回退到使用 n 本身进行排序。

关于 Django ORM : Perform conditional `order_by` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73685857/

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