我在django中编写了一个本机sql查询,现在我需要在where子句中传递过滤条件。
我将URL作为值列表(如(a,b,c,d))传递,并且在数据库中我需要将它们与列进行比较并过滤数据。
示例网址:
(适用// 10.100.212.16:8000/test/¶m1=a,b,c,d)
示例sql:
从测试中选择*,其中测试如(%a%)或类似(%b%)或类似(%c%)或类似(%d%)
如何使用本机sql在django中写这个。
我使用postgres作为db
感谢
答案 0 :(得分:2)
根据提供的URL,但假设您使用正确的?
字符而不是&
来标记查询字符串的开头:
import operator
from django.db.models import Q
param1_raw_string = request.GET.get('param1')
if param1_raw_string:
param1_values = param1_raw_string.split(',')
tests = Test.objects.filter(reduce(operator.or_, (Q(test__contains=param1) for param1 in param1_values)))
else:
# do something reasonable when param1 is missing
如果您想要不区分大小写的比较,请改用__icontains
。使用Q
撰写多个operator.or_
个对象是重点。
如果您使用?param1=a¶m1=b...
,则可以跳过split
,然后只需撰写param1_values = request.GET.getlist('param1')
。