English 中文(简体)
在Django中查询动态列的更清晰的方法是什么?
原标题:
  • 时间:2008-12-09 17:00:26
  •  标签:

在我的情况下,我有一些来自表单的列名。我想要过滤以确保它们都是真实的。这是我目前的方法:

for op in self.cleaned_data[ options ]:
    cars = cars.filter((op, True))

现在它可以运行,但可能要测试约40列,因此保持查询并不是非常有效的。

我能把这个压缩成一个过滤查询吗?

最佳回答

Django的查询集是延迟加载的,所以你现在所做的实际上是非常高效的。数据库直到你尝试访问QuerySet中的一个字段才会被访问......假设你没有编辑出一些代码,而且它实际上就像这样:

cars = CarModel.objects.all()
for op in self.cleaned_data[ options ]:
    cars = cars.filter((op, True))

更多信息点击此处

问题回答

将查询构建为字典,并使用**运算符将选项解包为关键字参数,传递给filter方法。

op_kwargs = {}
for op in self.cleaned_data[ options ]:
    op_kwargs[op] = True
cars = CarModel.objects.filter(**op_kwargs)

这个内容在django文档中有涵盖,也在SO中有说明。





相关问题
热门标签