在 Django 中获取 ContentType id 用于泛型关系



我正在使用遗留数据库将一个项目从 Rails 移植到 Django。 在 Rails 中,我有一个多态关联,允许我为数据库中的任何行添加脚注。 我正在尝试在 Django 应用程序中实现同样的事情。 我找到了关于通用关系的文档,它看起来很完美。 遗憾的是,我首先需要在旧数据库中创建新字段,以保存相关模型的 ContentType ID。 我只使用了与 2 个表的多态关联,所以我只需要来自 Django 应用程序的这两个相应的 id,但我似乎找不到合适的命令来查找 Django 中的 ContentType ID。

欢迎任何建议。 我尝试搜索以前的问题,但似乎找不到我要找的东西。 非常感谢您的时间和帮助。

来自文档

你可以做:

>>> b = Bookmark.objects.get(url='https://www.djangoproject.com/')
>>> bookmark_type = ContentType.objects.get_for_model(b)
>>> TaggedItem.objects.filter(content_type__pk=bookmark_type.id,
...                           object_id=b.id)

因此,只需实例化模型的实例,然后执行ContentType.objects.get_for_model(<instance>).id

我认为也有一种方法可以只传递模型名称......让我知道这是否会更好,我会尝试找到它;我过去用过它。

您还可以在不创建实例的情况下获取ContentType ID,如果您没有也不需要实例,而只想通过模型名称获取ContentType ID,则效率更高。

ContentType.objects.get(model='bookmark').id

注意:如果您的型号名称为大写,请使用小写进行搜索。例如:model = 'bookmark'而不是'Bookmark'

最新更新