【问题标题】:Django: Dynamically create a Q() with andDjango:使用和动态创建一个 Q()
【发布时间】:2013-11-03 21:59:06
【问题描述】:

我有一个用例,其中导入了一个 csv,我需要检查以确保特定列的所有条目都对应于同一个对象。

比如说:

l = ['test1', 'test2']

我需要类似的东西:

Model.objects.filter(Q(id='test1') and Q(id='test2')

我不知道 l 中有多少元素,那么我该如何构造一个允许我这样做的查询:

我试过了:

h = Q()
for i in l:
   h &= Q(id=i)

但这不起作用

感谢任何帮助

更新:

这也行不通

Models.objects.filter(reduce(operator.and_, l))

我认为 operator.and_ 是 & 运算符,这就是它不起作用的原因。这也能做到!!

【问题讨论】:

    标签: python django django-queryset django-orm django-q


    【解决方案1】:

    AND 是filter() 的默认操作。

    Models.objects.filter(*l)
    

    【讨论】:

      【解决方案2】:

      也许吧?

      if l: # 'l' is a bad variable name
        query = Models.objects  # this returns all objects!
        for item in l:
          query = query.filter(id=item) # each filter adds a 'and'
        return query.exits()
      else:
        return False  # If no values, does it return False?
      

      你真的是通过 id 字段来问的吗?每个模型实例不是唯一的吗?

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 1970-01-01
        • 2021-11-01
        • 2012-10-16
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 2011-01-28
        相关资源
        最近更新 更多