私は3つのモデルを持っています:それぞれの関係を持つ会社、プロジェクト、連絡先:
Company-Project (M2M)
Project-Contact (M2M)
Company-Contact (OneToMany)
私は人々が会社を作成するために使用するこの大きなフォームを持っています。また、フォームを送信せずに、ユーザーがその場でプロジェクトと連絡先を追加できるようにする必要があります。
Django Admin の動的モデル作成ボタン (小さな緑色のプラス) を M2M フィールドに移植することができました。したがって、会社が作成されている間、ユーザーはプロジェクト フィールドの近くにある緑色のプラスをクリックできます。ポップアップが表示され、プロジェクト インスタンスを作成できます。ポップアップで送信をクリックすると、ポップアップが閉じられ、元のフォームのプロジェクト ボックスが新しいプロジェクト データで更新されます。
OneToMany リレーションシップの場合、通常、ユーザーはコンボ ボックスを使用して "Many" 側にあるモデルを作成するときに、リレーションシップの "One" 部分を選択します。Contact モデルを作成してから選択すると、同じことが可能です。 ContactForm で作成済みの Company インスタンス。
問題は、会社作成フォームでこの関係の逆フィールドを作成しようとしていることです。したがって、理想的には、右側に緑色のプラスが付いた空の連絡先フィールド (新しい会社、連絡先はまだありません) が必要です。ユーザーがそれをクリックすると、新しいポップアップが開き、連絡先を作成できます。
私が思いついた唯一の解決策は、連絡先に temp_uuid フィールドを追加することです。これにより、CompanyForm の新しいインスタンスが作成されると、uuid が割り当てられ、ユーザーが緑色のプラスをクリックして連絡先を作成するたびに、フォームの uuid を連絡先の temp_uuid フィールドに割り当てます (これを疑似外部キーと呼んでもいいですか?)。そのため、会社がまだ作成されていなくても、作成後にフォームのフィールドにこの会社の連絡先を入力できます。フォームが送信されると、会社の pk を各連絡先の外部キーに割り当てて保存します。
これを行うにはもっと良い方法があるに違いありません。また、プロジェクトは App Engine で実行され、django-nonrel を使用するため、JOIN の使用は問題外です。