我如何做一个Django查询过滤器的左操作数是一个表达式



Django QuerySet API的文档解释了如何使用字段查找来过滤结果。我遇到的问题是,这种方法要求左操作数是一个字段,而我需要它是一个表达式,以实现等价的(' ' || tagnames || ' ') LIKE '% xyz %'

最好的方法是什么?为了澄清我所说的"最好"是什么意思:我希望能够独立于实际使用的数据库。

您可以这样做(不确定这是否一定是最佳方法):

from django.db.models import Q
...filter(Q(tag_name__startswith=tag_value+' ') | Q(tag_name__contains=' '+tag_value+' ') | Q(tag_name__endswith=' '+tag_value))

同样,你可以只使用你想要使用raw方法的实际SQL。

SomeModel.objects.raw('SELECT * FROM my_table')

我不太明白。您的意思是要过滤的字段名是由表达式决定的吗?在这种情况下

...filter(**{tag_name: tag_value})

可能就是你要找的

对于您的查询(' ' ' || tagnames || ' ') LIKE ' %xyz% '可以使用:

...filter( tag_name__contais = tag_value) 

因为空格可以简化

行动!你换了问题!

为您的新查询("| | tagname | |")像"% xyz %":

tag_list = tag_value.split(" ")
...filter( tag_name__in = tag_value) 

相关内容

  • 没有找到相关文章

最新更新