1

私が解決したいのは、このようなものです

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

問題は、動的オブジェクトとして名前があり、その長さが固定されていないことです。私が考えているのは、名前をループして動的argsオブジェクトを作成した場合ですが、それがどのようなオブジェクトなのかわかりません。それを正確に行う方法がわからないので、行き詰まっています。

あなたがそれを回避するのを助けることができれば、それは本当に素晴らしいことです. ありがとうございました

4

3 に答える 3

2
import operator
names = [...]
query = reduce(operator.or_, [Q(name__icontains=name) for name in names])
results = queryset.complex_filter(query)
于 2012-12-12T11:17:37.440 に答える
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)
于 2012-12-12T12:08:58.223 に答える
0

Qこの場合はどうなるかわかりませんが、もしかしたら

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

役立つかもしれません。しかし、これはティミーが書いたものと同じなので、私に賛成票を投じないでください。

そうでない場合は、こちらの質問を参照してください。

于 2012-12-12T10:53:05.440 に答える