如何为django Q对象动态加入多个参数

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类型.

我感谢您提供的任何建议,帮助或帮助链接.谢谢.

Dri*_*512 7

如果要动态构建查询列表,可以使用如下序列:

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)