如果LHS和RHS都是一个函数,我可以在Django中执行查询吗



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

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

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

是的,您可以通过其中一侧对模型对象进行注释,然后使用另一侧进行过滤:

from django.db.models.functions import Lower
QuerySet.objets.annotate(
field1_lower=Lower('field1')
).filter(
field1_lower=Lower('field2')
)

然而,对于大小写不变的匹配,您应该使用__iexact查找[Django-doc]:

from django.db.models import F
QuerySet.objets.filter(
field1__iexact=F('field2')
)

请注意,不区分大小写的匹配是而不是与对两个操作数调用Lower相同,然后检查两者是否匹配。事实上,排序规则定义了处理特殊字符的特定规则。例如,在德语中,ß没有小写变体。如何比较这些有特殊的规则。

相关内容

最新更新