pk整数のリストをaddまたはremoveに渡すと、オブジェクトにアクセスしますか?すなわち、各pkのデータベース呼び出しがありますか?Django manytomany追加または削除
1
A
答えて
2
中間テーブル(through
を使用)を指定せずにManyToManyField
を作成すると、Djangoがテーブルを生成します。この表は両方のモデルのpksだけを必要とするため、新しいリレーションシップを保存するために他のオブジェクトから何かを選択する必要はありません。
複数の挿入を使用する可能性がありますが、必ずしも多くのデータベース呼び出しを必要とすることはありません(複数の挿入コマンドを含む単一のSQLクエリが可能です)。それらの作成に必要なすべての情報(オブジェクトのpk)はすぐに利用できるので、必要以上のデータベースヒットは必要ありません。
更新:私は間違っていたようです。ソース(ジャンゴ/ DB /モデル/フィールド/ related.py)を見ると、私はそれがオブジェクトごとに独立した作成を実行することを見た:PKSのいずれかが提供されている場合その前に
for obj_id in new_ids:
self.through._default_manager.using(db).create(**{
'%s_id' % source_field_name: self._pk_val,
'%s_id' % target_field_name: obj_id,
})
を、それもチェック
vals = self.through._default_manager.using(db).values_list(target_field_name, flat=True)
vals = vals.filter(**{
source_field_name: self._pk_val,
'%s__in' % target_field_name: new_ids,
})
new_ids = new_ids - set(vals)
このチェックは、単一のクエリを使用して行われているものの...
0
は、あなたが自分で使用していることを確認しようとしたしました:すでに(重複したエントリ/一意性制約違反を避けるために)データベースに存在していましたQuerySet.query属性?
関連する問題
- 1. 削除カスケードハイバーネーションManyToMany
- 2. Django manytomany filter(relation = noneまたはrelation = xの場合は除外)
- 3. Nhibernateデータオブジェクトにオブジェクトが追加、削除、追加されました
- 4. jQuery追加/削除 - 追加しますが、削除しません。
- 5. djangoのオンザフライでManyToManyフィールドを追加する
- 6. カスタムDjango管理クラスは、モデルのManyToManyフィールドにアイテムを追加できますか?
- 7. jQuery FlexSliderを使用したスライドの追加または削除
- 8. Django管理者の「追加」機能を削除する
- 9. オプションを追加、削除、追加したときのピックリストエラー
- 10. Htaccess - 削除/ページ/追加 - "
- 11. UIScrollView - ラベルの追加/削除
- 12. Jquery UI Datepicker追加/削除
- 13. クロスブラウザーイベントハンドラー(追加、削除、トリガー)
- 14. リンククラスの削除/追加onclick
- 15. キーボードの追加と削除
- 16. WindowsでHTMLコードを追加または削除するResize
- 17. テーブルの2行を削除または追加する方法
- 18. 追加、更新、または削除後のバインディングソースのリフレッシュ
- 19. カスケードでレコードを削除または追加する(INSERT、UPDATE、DELETE)
- 20. 火コレクションが変更イベント(追加または削除)
- 21. React.js Bootstrap入力フィールドを追加または削除する
- 22. ボタンを動的に追加または削除する方法
- 23. jqueryのは、(ECCを追加、削除、検索。)ナビゲーションバーを追加jqgrid
- 24. SQLAlchemy追加フィールドを持つManyToManyセカンダリテーブル
- 25. 動的に追加されたフォームフィールドはform.cleaned_dataで削除されます
- 26. Django - フィルタmanytomanyフィールド - request.LANGUAGE_CODE
- 27. Django/ManyToManyフィールドのユーザーアクセス
- 28. Djangoで自動生成されたManyToManyテーブルの冗長IDフィールドを削除するには?
- 29. アイテムをアニメートしてjQueryアコーディオンに追加/削除しました
- 30. プッシャーSwiftメンバーがイベントを追加/削除しました
'add'と' remove'にはチェックするクエリ属性がありませんが、同様のアプローチがあります。 'django.db import connection'を実行してから、多くの関係を追加または削除する前後に' connection.queries'を表示します。 – Alasdair
ありがとう、それについて知らなかった。 – side2k