我想要解决的是这样的事情
names = ['Aleister', 'Matovu']
args = (Q(name__contains=name[0])|Q(name__contains=name[1]))
queryset.complex_filter(args)
问题是我有一个名称作为动态对象,其长度不固定。我想的是,如果我通过名称循环并创建了一个动态args
对象,但我不确定是什么类型的对象。我不知道究竟是怎么做到的,所以我被卡住了。
如果你可以帮助解决这个问题,那将会非常酷,或者如果你能给我另一种方法来实现同样的方案,那就太棒了。 谢谢
答案 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)