web-dev-qa-db-ja.com

Django 'objects.filter()' with list?

次のような方法でQuerySetを制限することができます。

creators_list = ['jane', 'tarzan', 'chita']
my_model.objects.filter(creator=creators_list)

???

20
krzyhub

こういう意味ですか?

my_model.objects.filter(creator__in=creator_list)

ドキュメント: http://docs.djangoproject.com/en/dev/ref/models/querysets/#in

[〜#〜]編集[〜#〜]

これは少し時代遅れになりました。元のコードで問題が発生した場合は、次のことを試してください。

from Django.db.models import Q

my_filter_qs = Q()
for creator in creator_list:
    my_filter_qs = my_filter_qs | Q(creator=creator)
my_model.objects.filter(my_filter_qs)

おそらくもっと良い方法がありますが、現時点ではテストできません。

38

また、sqliteを使用していて問題が発生した場合は、リスト内のアイテムの最大数に制限があります。

def divideChunks(l, n):
    for i in range(0, len(l), n):
        yield l[i:i + n]

for slicerange in divideChunks(objs, 10):
        myobjects = my_model.objects.filter(creator__in = slicerange)
        ...
0
riza salahuddin