私は次のモデルを持っています:
- 応用
- お問い合わせフォーム
- ゲーム
- ランディングページ
- クライアント
新しいクライアントを追加した後、クライアントの下に新しいアプリケーションを追加したいと考えています。このために、次のように Clients to Applications の下に m2m フィールドを追加しました。
applications = models.ManyToManyField(Application, verbose_name=u'Applications')
アプリケーションは何でもかまいませんので、contenttype フレームワークを使用する必要があることがわかりました。そこで、アプリケーションモデルの下に以下を配置しました:
applicationContentType = models.ForeignKey(ContentType)
applicationId = models.PositiveIntegerField()
application = generic.GenericForeignKey('applicationContentType', 'applicationId')
このようにして、コンテンツ タイプ (この場合はコンテンツ フォーム) を選択し、既存のコンタクト フォームの ID を入力することで、新しいアプリケーションを追加できます。そして、管理ページのクライアントの m2m フィールドで確認できます。
ただし、次の操作を行うと、クライアントに追加したばかりのアプリケーションが表示されません。
In [2]: t = Client.objects.get()
In [3]: t.applications.all()
Out[3]: []
また、新しく追加されたコンタクト フォームの ID を覚えておく必要があるのは、あまり良くありません。これのエレガントな解決策はありますか?それとも、問題に対する視点を変えて、別の方法で行うべきですか?