2

django orm を使用して取得したモデルを保存する最良の方法を見つけようとしています。モデル/テーブルがありUserます。ContactInfoさらに、 User テーブルへの外部キーを格納するというモデル/テーブルがあります。

一般的な django orm の慣行は、ContactInfo モデルの外部キーを User モデルに入れることだと理解していますが、この時点では、既にモノリシックな user テーブルに何も追加したくないので、外部キーをContactInfo モデル。

User モデルを ContactInfo モデルに保存し、ContactInfo で save を呼び出し、User モデルを保存できることは理解していますが、ユーザーとその連絡先情報と 1 対多の関係がある場合はどうなるでしょうか? 連絡先情報モデル/オブジェクトの (1-多数) インスタンス内にユーザー テーブルの複数のインスタンスを持たない方がよいでしょう。

何かをクリアできる場合は、お知らせください。現時点では、ContactInfo リストのインスタンスを として保存し、ユーザーが contact_info を確認できるようuser.contact_infoに save メソッドをオーバーライドし、存在する場合は各モデルに を挿入して保存することをお勧めします。残念ながら、これは少し面倒だと思いますが、django と python に慣れていないので、自分のオプションが何であるかわかりません。user.save()user.id

どんな助けでも大歓迎です、ありがとう!

4

2 に答える 2

1

あなたの質問を正しく理解しているかどうかはわかりません。Djangoは1-N関係を適切にサポートします。ContactInfoの外部キーがUserデフォルトである場合、それは1-Nマッピングです。

ContactInfo--------->ユーザー
             N 1

したがって、Userデータベースには1つのレコードしかなく、次のようになります。

テーブルユーザーテーブルContactInfo
---------------------------------------------
id user_name id user_id
 1人11
                               2 1
                               3 1

また、メソッドをオーバーライドする必要はありませんsave。連絡先を追加する必要がある場合は、

contact = ContactInfo(user=target_user)
# other stuff
contact.save()
#or 
target_user.contactinfo_set.create(...)#contactinfo_set is the related name of target_user
#Django maintains the foreign key things.

上記の方法を使用して新しいレコードを挿入する場合、データベースにuser.idを挿入するためにリストをContactInfo繰り返す必要はありません。contact_info

于 2012-08-07T05:50:28.363 に答える
0

Userカスタムモデルを意味しているのか、Django に同梱されている標準モデルを意味しているのかはわかりません。後者の場合、Django は、各ユーザーに関連付けられたユーザー プロファイルと呼ばれる追加情報を保存する標準的な方法を提供します。詳細については、ドキュメントのこのセクションを参照してください。

于 2012-08-07T06:29:08.470 に答える