Django使用GenericForeignKey引用模型

3

好的,我的数据库具有标题/行类型结构,其中有许多行模型的标题模型。这个结构在许多模型上都存在。我想跟踪哪些标题模型与哪些行模型相关。

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

因此,我以前使用过Django的GenericForeignKey,但仅当我想要与多个模型记录建立外键关系而不仅仅是模型本身时才使用。

使用GenericForeignKey需要三件事:

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

在我的情况下,我不需要object_id,但是我认为我不能把它省略掉...
所以经过这一切,我想问的问题是,使用GenericForeignKey是设置此模型的最佳方法吗,还是有其他解决方案。
另一个想法就是只使用模型名称...
希望这一切都说得通。谢谢。

如果我理解你的问题正确,那么只需要在ForeignKey中引用ContentType即可满足你的需求。 - Bernhard Vallant
那么这会在数据库中创建一个名为 content_type 的字段,只存储模型的内容类型 ID 吗? - neolaser
1个回答

3
今日免费次数已满, 请开通会员/明日再来
my_model = models.ForeignKey(ContentType)

然后,如果您想弄清楚一个头部与哪个模型相关联,只需执行
>>> my_header.my_model
<ContentType: Model Name>

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


我明白最后一个字段不在数据库中,但说实话,我并不真正理解为什么。感谢您的解释和出色的答案。 - neolaser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接