代码之家  ›  专栏  ›  技术社区  ›  Oli

在Django中查询动态列数的更干净的方法?

  •  0
  • Oli  · 技术社区  · 17 年前

    在我的例子中,我有许多来自表单的列名。我想过滤以确保它们都是真的。以下是我目前的做法:

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

    作品

    2 回复  |  直到 17 年前
        1
  •  9
  •   Community Mohan Dere    8 年前

    将查询构建为字典,并使用**运算符将选项作为关键字参数解压缩到筛选器方法。

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

    这在本手册中有介绍 django documentation SO

        2
  •  3
  •   Daniel Naab    17 年前

    Django的查询集是惰性的,所以您当前所做的实际上是非常高效的。在您尝试访问QuerySet中的某个字段之前,不会命中数据库。。。假设,也就是说,您没有编辑一些代码,实际上是这样的:

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

    更多信息 here .