15

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

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

4

2 回答 2

16

文档

你可以做:

>>> 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

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

于 2012-10-03T22:51:47.730 回答
6

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

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

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

于 2013-11-12T09:40:21.757 回答