除外を複数回呼び出すのではなく、クエリを実行して物のリストを除外する方法はありますか?Djangoオブジェクト複数除外()
13
A
答えて
28
をベースに、あなたは単にタグのリストを除外したいと思うように聞こえます。したがって、in
フィルタを使用することができます:
names_to_exclude = [o.name for o in objects_to_exclude]
Foo.objects.exclude(name__in=names_to_exclude)
あなたはそれが欲しいですか?
3
複数回除外を呼び出すと何が問題になりますか?クエリは怠惰で、データを取得するまで何も起こらないので、.exclude()を複数回使用することには欠点はありません。
4
あなたはQ objectでかなり簡単にそれを行うことができます。
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)
ます。また、)(除外と動的にそれを行うことができる必要があります:ネッドへの返信に
qs = Foo.objects.all()
for tag in ignored_tags:
qs = qs.exclude(tag=tag)
0
私は大規模なデータセットは、IEに高価になる可能性がありますが、forループの代わりに、クエリセットから直接、必要な値を取得する方が良いと思いダニエルローズマンの答えを改善する
names_to_exclude = objects_to_exclude.values_list('name')
Foo.objects.exclude(name__in=names_to_exclude)
-1
あなたが試すことができますこれもまた。
exclude_list = ['A', 'B', 'C'] qs = Foo.objects.exclude(items__in=exclude_list)
関連する問題
- 1. (Django)Ajax - 複数のオブジェクト
- 2. djangoの複数のフィールドをdatadumpから除外する
- 3. djangoで複数のオブジェクトを削除する
- 4. 複数のフィルタタギング/除外
- 5. 複数のオブジェクトからのDjango ForeignKey
- 6. Django - 複数のフィールドがある場合は重複するオブジェクトを削除します
- 7. Djangoクエリ内の注釈項目の数を除外します
- 8. 複数のDjangoテンプレートローダー
- 9. Django複数のキャッシュバックエンド
- 10. djangoワンフォーム複数表
- 11. 複数のDjangoプロジェクト
- 12. プライマリキーの重複除外テーブル
- 13. Djangoと複数の外部キーを持つモデル
- 14. django-grappelli複数の外部キーフィールドを持つオートコンプリートルックアップ
- 15. Djangoモデルの複数の外部キーの参照
- 16. django:マイグレーションからモデルを除外する
- 17. Djangoフィールドセットで除外を使用する
- 18. Django queryset正規表現を除外
- 19. 逆の外部キーでDjangoカスケード削除
- 20. djangoツリービートのオブジェクトの複数のバージョン(リビジョン)MP_Nodeツリー
- 21. 複数のオブジェクトをdjangoのRequestContextに渡す
- 22. 最新の日付に基づいてDjangoクエリーセットからオブジェクトを除外する
- 23. DjangoのORMのオブジェクト数
- 24. Djangoでの複数入力
- 25. Django - 複数のサイトのサイトキャッシング
- 26. Djangoの複数のサイト
- 27. 複数のdjango管理インスタンス
- 28. Djangoでの複数継承
- 29. Djangoクラスのフィールドを除いてフィールドを除外する
- 30. AWS S3 synを使用して複数のフォルダを除外
私はオブジェクトのリストを直接削除します。私はo.nameを使用しません。 ignore_tags = request.user.ignore_tags.all() case_list = Case.objects.exclude(tags__in = ignore_tags)) – Johnd