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)