我有一个具有一般关系的模型:

TrackedItem --- genericrelation ---> any model

我希望一般能够从最初的模型中获得被跟踪的项目.

我应该可以在任何模型上做,而不需要修改它.

为此,我需要获取内容类型和对象ID.获取对象id很容易,因为我有模型实例,但是获取内容类型就不容易了:ContentType.object.filter需要模型(只有content_object.__class__.__name__)和APP_LABEL.

我不知道如何以一种可靠的方式获得一个模型所在的应用程序.

目前我做了app = content_object.__module__.split(".")[0]个,但它不适用于Django Conrib应用程序.

推荐答案

你不需要仅仅为了获取contenttype而获取应用程序或模型——有一种简便的方法可以做到这一点:

from django.contrib.contenttypes.models import ContentType

ContentType.objects.get_for_model(myobject)

尽管名称如此,但它同时适用于模型类和实例.

Django相关问答推荐

如何在管理页面创建实例时只在ManyToManyField字段中显示超级用户

如何在Django REST框架中管理序列化程序?

Django 中主键的隐式 UUID 自动字段

Django rest framework, AttributeError: 'str' object has no attribute 'data' 无法使用表单上传图片

DecimalField 验证错误,返回不正确的值 Django

Django 转储数据将附加数据添加到 json 导出

Django 模型 Select - 只允许管理界面上的特定转换

将 **kwargs 传递给 Django 表单

Django 模板上的 URL 编码

在 Django 过滤器语句中,__exact 和等号 (=) 有什么区别?

Django删除查询集的最后五个以外的所有内容

具有基于类的视图的 cache_page

Django manage.py:在其依赖之前应用迁移

Django 什么是反向关系?

如何重置 PostgreSQL 表上的 ID 序列

在 django admin 中链接到外键对象

模型表格Save保存,Get获取保存的对象

如何在该元素中的所有应用程序之间共享元素范围的模板标签

django - 使用 get_or_create 自动创建用户时设置用户权限

使用 request.user 的 Django 和中间件始终是匿名的