[英]django, contenttype and m2m generic relations
我有以下型號:
添加新的客戶端后,我想在客戶端下添加新的應用程序。 為此,我在“客戶端”下為應用程序添加了一個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並不是很好。 是否有一個優雅的解決方案? 還是應該改變我對問題的看法並以其他方式解決?
注意:我知道這是一個非常老的問題,但以為有人可能會對此有所幫助
如果每個應用程序模型(或其abstract
父級 )都具有一個指向客戶端的m2m密鑰,那么您所描述的內容將非常有效。 除非絕對必要,否則我不建議您使用通用外鍵(相信我,您稍后會感謝我)。
例如,采用一個應用程序模型:
class Application(models.Model):
class Meta:
abstract = True
field1 = ...
field2 = ...
client = models.ManyToManyField('clients.Client',
related_name="related_%(class)s")
使用這種方法,您將分別通過related_games
, related_contactforms
和related_landingpages
向客戶端提供反向字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.