gpt4 book ai didi

Django ORM、Q 语句和自定义排序

转载 作者:行者123 更新时间:2023-12-04 07:31:07 25 4
gpt4 key购买 nike

为了清楚起见,我正在简化这一点。假设我有这个函数可以找到 Document基于 requestedColor 的记录.

def find_docs(requestedColor):
docs = Document.objects.filter(Q(color=requestedColor) | Q(other_color=requestedColor))
我想对结果进行排序,以便使用 color 找到文档将出现在用 other_color 找到的对象之前我想在查询中完成它 - 没有任何外部排序。
有没有办法在 ORM 查询中做到这一点?我找不到办法做到这一点。
指针将不胜感激。

最佳答案

您可以使用 Conditional Expressionsannotate一个值,该值将指示哪个字段匹配并按此值排序:

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

docs = Document.objects.annotate(
color_order=Case(
When(color=requestedColor, then=Value(1, output_field=IntegerField())),
When(other_color=requestedColor, then=Value(2, output_field=IntegerField())),
default=Value(0, output_field=IntegerField()),
)
).filter(
Q(color=requestedColor) | Q(other_color=requestedColor)
).order_by('color_order')

关于Django ORM、Q 语句和自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67926415/

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