除外を複数回呼び出す代わりに、クエリを実行してリストを除外する方法はありますか?
27299 次
5 に答える
51
Nedへの返信に基づくと、タグのリストを除外したいようです。in
したがって、フィルターを使用するだけで済みます。
names_to_exclude = [o.name for o in objects_to_exclude]
Foo.objects.exclude(name__in=names_to_exclude)
それはあなたが望むことをしますか?
于 2009-05-26T21:28:09.623 に答える
9
除外を複数回呼び出すことの何が問題になっていますか?クエリは怠惰であり、そこからデータをプルしようとするまで何も起こらないため、.exclude()を複数回使用することのデメリットはありません。
于 2009-05-26T20:27:36.437 に答える
7
これも試すことができます。
exclude_list = ['A', 'B', 'C']
qs = Foo.objects.exclude(items__in=exclude_list)
于 2017-10-10T07:23:53.543 に答える
5
あなたはQオブジェクトでそれをかなり簡単に行うことができます:
from django.db.models import Q
excludes = None
for tag in ignored_tags:
q = Q(tag=tag)
excludes = (excludes and (excludes | q)) or q # makes sure excludes is set properly
set_minus_excluded = Foo.objects.exclude(excludes)
また、exclude()を使用して動的に実行できる必要があります。
qs = Foo.objects.all()
for tag in ignored_tags:
qs = qs.exclude(tag=tag)
于 2009-05-26T21:06:50.773 に答える
4
Daniel Rosemanの回答を改善するには、大規模なデータセットでコストがかかる可能性のあるforループではなく、クエリセットから直接必要な値を取得する方がよいと思います。
names_to_exclude = objects_to_exclude.values_list('name')
Foo.objects.exclude(name__in=names_to_exclude)
于 2017-01-20T06:47:00.317 に答える