Django使用GenericForeignKey引用模型

时间:2011-02-21 23:03:00

标签: django models

好的,所以我的数据库有一个标题/行类型结构,其中有包含许多行模型的标题模型。这种结构适用于许多型号。我想跟踪哪些标题模型与哪些线模型相关。

最初我只是在标题模型上有一个指向相关模型的属性,但希望将其存储在数据库中。

所以我之前使用过djangos GenericForeignKey这些东西,但只有当我想要与几个模型记录建立外键关系时,而不仅仅是模型本身。

使用GenericForeignKey,您需要做三件事:

content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')

在我的情况下,我不需要object_id,但我不认为我可以把它排除在外......

所以我想我的问题是,如果使用GenericForeignKey是设置此模型的最佳方式,还是有其他解决方案。

另一个想法就是使用模型名称......

希望这一切都有道理。感谢

1 个答案:

答案 0 :(得分:3)

由于您只是希望它指向模型本身而不是单个记录,所以您需要的只是

my_model = models.ForeignKey(ContentType)

然后,如果你想弄清楚标题与哪个模型相关联,那就做吧

>>> my_header.my_model
<ContentType: Model Name>

如果要指向特定记录,则需要另外两个字段。 object_id字段保存您指向的记录的pk。并且content_object字段不存储在数据库中,而是一个很好的包装器(使用object_id和content_type字段)返回模型对象,而不是必须根据内容类型和id手动查找记录