我有以下型号:
- 应用
- 联系表
- 游戏
- 登陆页面
- 客户
添加新客户端后,我想在客户端下添加新应用程序。为此,我在 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 不是很好。有没有一个优雅的解决方案?还是我应该改变我对问题的看法并以不同的方式来做?