0

私は次のモデルを持っています:

  1. 応用
    1. お問い合わせフォーム
    2. ゲーム
    3. ランディングページ
  2. クライアント

新しいクライアントを追加した後、クライアントの下に新しいアプリケーションを追加したいと考えています。このために、次のように 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 を覚えておく必要があるのは、あまり良くありません。これのエレガントな解決策はありますか?それとも、問題に対する視点を変えて、別の方法で行うべきですか?

4

1 に答える 1