1

djangoアプリケーションでは、マネージャーの「add」メソッドをかなり頻繁に使用する多対多の関係があります(つまり、album.photos.add())。

多対多の関係に関するデータを保存する必要があることに気付きましたが、addメソッドを失いたくありません。「through」モデルのすべての追加フィールドにデフォルト値を設定し、どういうわけかaddメソッドを再実装できますか?

カスタムマネージャーについてはよくわかりませんが、それが適切な場所であると思われます。

アップデート:

カスタムマネージャーを読んでいます。多対多フィールドに「through」引数を追加するときに、add / remove / etcが無効にならないようにすることができますか?

誰かがそれを行う方法を知っていますか?

4

1 に答える 1

2

最も簡単な方法は、メタデータを処理し、適切にリンクされたPhotoインスタンスを手動で作成するメソッド(つまり、album.add_photo())をAlbumに追加することです。

すべてをファンキーにしたい場合は、Photosのカスタムマネージャーを作成し、それをデフォルト(つまり、最初に割り当てられたマネージャー)にし、use_for_related_fields = Trueを設定して、適切に設定できるadd()メソッドを指定できます。関係のデフォルトのメタデータ。

余談ですが、Djangoがこれを一般的にするのはそれほど難しいことではないようです。スルーテーブルがある場合にadd()メソッドを削除する代わりに、add()に任意のkwargを受け入れさせ、それらをスルーテーブルのデータとして扱うようにします。

于 2009-06-25T17:07:40.757 に答える