Djangoデータモデルのクエリーセットの一括更新 - 多対多フィールドの更新方法を教えてください。Djangoクエリーセットの多対多フィールドを一括更新する方法
例えば、Photo
というデータモデルと、PhotoStream
というデータモデルがあります。 Photo
には、which_stream = models.ManyToManyField(PhotoStream)
があります。
私はchildhood_photos
と呼ばれるPhotos
のクエリセットを抽出し、そして私は、このクエリセット内のすべてのオブジェクトの多対多のフィールドに新しいPhotoStream
オブジェクトを追加する必要があります。このPhotoStreamオブジェクトをfor_classmates
としましょう。
私はchildhood_photos.update(which_stream.add(for_classmates))
を試してみますが、それは私にエラーを与えます:グローバル名 'which_stream'は定義されていません。
どうすればこの操作を行うことができますか?
ありがとうございます。これを見れば、これは**新しいフィールドを作成することですが、 'through'テーブルだけにあります。私の心には、それは私が試していた**アップデート**の手順も同じです。したがって、それらは同等です。私はそれが私の頭の中で正しいことを確認したい、はい? –
「スルーテーブル」だけではどういう意味ですか?スルーテーブルは 'ManyToManyField'のために本当に何かが起こる唯一の場所です!これは新しいフィールド(!?)を作成するのではなく、すべての目的の写真にfor_classmates'ストリームを追加します。 – schwobaseggl
'update'操作を使うと、その特定のモデルにあるフィールドだけが更新されます。 M2Mフィールドについては、特定のテーブルでは実際には作成されませんが、1番目と2番目のテーブルに関連するデータベースには新しいスルーテーブルが作成されます。ストリームを更新するために 'Photo'モデルで' update'を実行することは、throughテーブルの行を作成することと同じではありません。 – AKS