如何使用左操作数是表达式的过滤器进行Django查询?

时间:2011-11-16 20:52:39

标签: django django-queryset

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

最好的方法是什么?澄清“最佳”的含义:我希望能找到与实际使用的数据库无关的东西。

3 个答案:

答案 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)