使用|创建动态对象分离器python

时间:2012-12-12 10:43:54

标签: python django

我想要解决的是这样的事情

names = ['Aleister', 'Matovu']
args = (Q(name__contains=name[0])|Q(name__contains=name[1]))
queryset.complex_filter(args)

问题是我有一个名称作为动态对象,其长度不固定。我想的是,如果我通过名称循环并创建了一个动态args对象,但我不确定是什么类型的对象。我不知道究竟是怎么做到的,所以我被卡住了。

如果你可以帮助解决这个问题,那将会非常酷,或者如果你能给我另一种方法来实现同样的方案,那就太棒了。 谢谢

3 个答案:

答案 0 :(得分:2)

import operator
names = [...]
query = reduce(operator.or_, [Q(name__icontains=name) for name in names])
results = queryset.complex_filter(query)

答案 1 :(得分:0)

我不知道在这种情况下Q是什么,但也许

import operator
qq = [Q(name__contains=i) for i in name)]
args = reduce(operator.or_, qq)

可能有所帮助。但是因为这与Timmy wrote相同,所以不要向我投票,而是向他投票。

如果没有,请参阅this question here

答案 2 :(得分:0)

这是一个非常令人满意的解决方案。如果它对任何人都有任何帮助

http://bradmontgomery.blogspot.com/2009/06/adding-q-objects-in-django.html

q = Q(content__icontains=term_list[0]) | Q(title__icontains=term_list[0])
for term in term_list[1:]:
    q.add((Q(content__icontains=term) | Q(title__icontains=term)), q.connector)

stories = stories.filter(q)