查询Django中动态列数的更清洁方法?

Oli*_*Oli 0 python django

就我而言,我有一些来自表单的列名.我想过滤以确保它们都是真的.这是我目前的做法:

for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))
Run Code Online (Sandbox Code Playgroud)

现在它可以工作,但是有可能有大约40列要测试,因此保持查询效率不高.

有没有办法可以将它压缩成一个过滤查询?

Pra*_*ogg 9

将查询构建为字典,并使用**运算符将选项解压缩为filter方法的关键字参数.

op_kwargs = {}
for op in self.cleaned_data['options']:
    op_kwargs[op] = True
cars = CarModel.objects.filter(**op_kwargs)
Run Code Online (Sandbox Code Playgroud)

这在django文档中有所介绍,并且也在SO上有所涉及.