0

イテレータを使用してdjangoで複雑なクエリを作成するにはどうすればよいですか? 実際、これは django よりも「基本的な python」に近いと思いますが、困惑しています。

基本的に、リスト オブジェクトを取得して、これに相当するものを生成したいと考えています。

SELECT FROM examples WHERE mystuff LIKE 'EX1' OR mystuff LIKE 'EX2';

これが私の試みのサンプルコードです。

from example.models import Examples
from django.db.models import Q

includes = ['EX1', 'EX2']

conditions = []
# I can do something like this, which does build a list of objects
for ex in excludes:
    conditions.append(~Q(fullblock_icontains='%s' % ex))

# print conditions
# [<django.db.models.query_utils.Q object at 0x03557AB0>, 
# <django.db.models.query_utils.Q object at 0x03557AD0>]

# then I need to do something like this, but obviously this won't work.
blocks = Examples.objects.filter('|'.split(conditions)) 

また、同じことをやりたいと思いますが、否定的です (~Q)。LIKE が分かれば、NOT LIKE が明らかになると思います。

4

2 に答える 2

3
import operator
qobjects = [ ~Q(...), Q(...), Q(...) ]
f = reduce(operator.or_, qobjects)
Examples.objects.filter(*f)
于 2012-12-05T15:21:32.143 に答える
1

OR句を生成するためのドキュメントを確認してください

sを連鎖Qするには、試してくださいoperator.or_

import operator
blocks = Examples.objects.filter(reduce(operator.or_, conditions))
# which works as
blocks = Examples.objects.filter(conditions[0]|conditions[1]|...)
于 2012-12-05T15:21:58.493 に答える