Igl*_*gle 2 python django join querying django-q
我正在尝试在django sqlite db中实现搜索.
我得到一个未知长度的参数列表,它们都应该与'LIKE'匹配.这意味着我希望所有与至少一个参数匹配的对象.
正如我从django文档中看到的那样,我可以通过使用Q对象来实现.
例:
Students.objects.get(
Q(name_contains='franz') |
Q(birthdate_date=date(2005, 5, 2) |
Q(param3_contains='lorem'
)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如何处理它以加入从params创建的所有Q对象作为参数传递给objects.get().我找不到这个.
这里的另一个问题是处理几种不同的Field Lookup类型.
我感谢您提供的任何建议,帮助或帮助链接.谢谢.
如果要动态构建查询列表,可以使用如下序列:
request = Q(name_contains='franz')
if condition1:
request |= Q(birthdate_date=date(2005, 5, 2))
if condition2:
request |= Q(param3_contains='lorem')
Run Code Online (Sandbox Code Playgroud)
然后:
Students.objects.get(request)
Run Code Online (Sandbox Code Playgroud)
如果你需要更通用的东西,你可以有一个传递dict的函数,如:
conditions = {'name_contains': 'franz',
'birthdate_date': date(2005, 5, 2),
'param3_contains': 'lorem'}
Run Code Online (Sandbox Code Playgroud)
并建立这样的条件(未经测试):
request = None
for key, value in conditions:
new_request = Q(**{key: value})
if request: request |= new_request
else: request = new_request
Run Code Online (Sandbox Code Playgroud)