Django QuerySet API的文档说明了如何使用字段查找过滤结果。我遇到的问题是这种方法要求左手操作数是一个字段,我需要它作为一个表达式,以实现相当于(' ' || tagnames || ' ') LIKE '% xyz %'
。
最好的方法是什么?澄清“最佳”的含义:我希望能找到与实际使用的数据库无关的东西。
答案 0 :(得分:2)
您可以通过以下方式完成此任务(不确定它是否必须是最佳方式):
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')
答案 1 :(得分:0)
不确定我会效仿。你的意思是你要过滤的字段名称由表达式决定?在这种情况下
...filter(**{tag_name: tag_value})
可能就是你要找的东西
答案 2 :(得分:0)
对于您的查询(''|| tagnames ||'')LIKE'%xyz%'适用于:
...filter( tag_name__contais = tag_value)
因为空白可以简化。
OPS!你改变了问题!
用于新查询(''|| tagnames ||'')LIKE'%xyz%':
tag_list = tag_value.split(" ")
...filter( tag_name__in = tag_value)