首页 > 解决方案 > 了解 Django 中的通用外键

问题描述

我正在尝试了解 Django 中的通用外键。我刚刚运行了一个有效的输入脚本,但我仍然有问题:

所有插入的行都引用相同的 content_type,因此它们都具有相同的 content_type_id 是有道理的,在本例中为 35。但是数字 35 是从哪里来的?我在其他地方是否还有 34 个其他 content_type,例如 Django 对 content_type 的默认使用?(不,我检查过)。这个数字的使用与 PK 或 FK 有何不同?

object_id 就像我的主键一样,是一个 uuid。这些似乎每行都不同。但是这个数字所识别的对象是什么?由于通用外键将 GenericForeignKey('content_type', 'object_id') 作为参数,也许这是该行与我的 content_type 关系的“通用”外键?或者它是我以后可能连接到的任何和所有未来 content_types 的通用外键?既然在这种情况下它们都指向同一个内容对象,为什么它们没有得到相同的 object_id,就像它们都得到相同的 content_type_id 一样?

标签: django

解决方案


你把事情复杂化了。

内容类型 id 是 ContentType 表中目标模型的 id。所以是的,您的数据库中至少有 34 种其他内容类型,或者在某些时候已经存在。

对象 id 是目标对象的 id - 即主键。当然,它们都是不同的;如果它们都相同,它们都将引用同一个对象。


推荐阅读