Django:用和动态创建一个Q()

时间:2013-10-24 23:48:23

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

我有一个用例,其中有一个导入的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_是&运算符,这就是为什么它不起作用。这甚至可以做到!!

2 个答案:

答案 0 :(得分:0)

AND是filter()的默认操作。

Models.objects.filter(*l)

答案 1 :(得分:-1)

也许那个?

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领域吗?对于每个模型实例来说,它不是唯一的吗?