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フィールドのインスタンスを削除するには
- 3. Django manytomany filter(relation = noneまたはrelation = xの場合は除外)
- 4. スタンドアロンCollectionTypeは(追加/削除)
- 5. Nhibernateデータオブジェクトにオブジェクトが追加、削除、追加されました
- 6. jQuery追加/削除 - 追加しますが、削除しません。
- 7. djangoのオンザフライでManyToManyフィールドを追加する
- 8. Django:各ManyToManyフィールドオプションにフィールドを追加する
- 9. カスタムDjango管理クラスは、モデルのManyToManyフィールドにアイテムを追加できますか?
- 10. レイヤーを追加/削除するリーフレット効果の防止または削除
- 11. jQuery FlexSliderを使用したスライドの追加または削除
- 12. Django - ファイルまたは画像の削除
- 13. ManyToMany関係でオブジェクトを削除した後にデータを保持
- 14. 削除されたファイルを再追加
- 15. django管理者の編集と削除ボタンの追加方法
- 16. Django管理者の「追加」機能を削除する
- 17. フィールドを動的に追加/削除するdjango
- 18. djangoリーフレット - HTMLページのボタンのコントロールを追加/削除する
- 19. djangoフォームフィールドにプレースホルダを追加し、デフォルトのラベルを削除する
- 20. JPA - @ManyToManyからエンティティを削除する
- 21. Hibernate ManyToMany wtih column子の削除
- 22. オプションを追加、削除、追加したときのピックリストエラー
- 23. Django manytomanyフィールドフィルタリスト
- 24. DjangoモデルManyToManyリレーションメカニクス
- 25. 逆クエリmanytoMany Django
- 26. リンククラスの削除/追加onclick
- 27. Jquery - 削除後に追加
- 28. jQueryクラスの追加/削除
- 29. クラスの追加と削除
- 30. Vue.js dynamic追加と削除
'add'と' remove'にはチェックするクエリ属性がありませんが、同様のアプローチがあります。 'django.db import connection'を実行してから、多くの関係を追加または削除する前後に' connection.queries'を表示します。 – Alasdair
ありがとう、それについて知らなかった。 – side2k