我可以在LHS和RHS均为函数的Django中执行查询吗?

问题描述 投票:1回答:1

我想在Django中执行查询,其中左侧和右侧都是函数。我正在尝试实现一些复杂的查询处理(编写WFS服务器),在这种情况下可能会发生以下情况:

SELECT * FROM table WHERE LCASE('LiteralValue') = LOWER(field2)

是否可以使用QuerySet.filter(..)Q(..)对象API?它总是希望表达式以字段开头。

django django-orm
1个回答
0
投票

是的,您可以在一侧注释模型对象,然后在另一侧进行过滤:

from django.db.models.functions import Lower

QuerySet.objets.annotate(
    field1_lower=Lower('field1')
).filter(
    field1_lower=Lower('field2')
)

对于不区分大小写的匹配,您应该使用__iexact lookup [Django-doc]

__iexact

请注意,不区分大小写的匹配是not与在两个操作数上调用from django.db.models import F QuerySet.objets.filter( field1__iexact=F('field2') )相同,然后检查两个是否匹配。实际上,排序规则定义了处理特殊字符的特定规则。例如,在德语中,ß没有小写变体。有比较这些规则的特殊规则。

© www.soinside.com 2019 - 2024. All rights reserved.