最初我只是在标题模型上有一个指向相关模型的属性,但希望将其存储在数据库中。
所以我之前使用过djangos GenericForeignKey
这些东西,但只有当我想要与几个模型记录建立外键关系时,而不仅仅是模型本身。
使用GenericForeignKey
,您需要做三件事:
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
在我的情况下,我不需要object_id
,但我不认为我可以把它排除在外......
所以我想我的问题是,如果使用GenericForeignKey
是设置此模型的最佳方式,还是有其他解决方案。
另一个想法就是使用模型名称......
希望这一切都有道理。感谢答案 0 :(得分:3)
由于您只是希望它指向模型本身而不是单个记录,所以您需要的只是
my_model = models.ForeignKey(ContentType)
然后,如果你想弄清楚标题与哪个模型相关联,那就做吧
>>> my_header.my_model
<ContentType: Model Name>
如果要指向特定记录,则需要另外两个字段。 object_id字段保存您指向的记录的pk。并且content_object字段不存储在数据库中,而是一个很好的包装器(使用object_id和content_type字段)返回模型对象,而不是必须根据内容类型和id手动查找记录