如何从 Django 模型类获取 content_type?

rob*_*ine 2 python django django-models content-management-system

我正在尝试获取 django models.Model 的 ContentType。不尝试从 ContentType 获取模型,这是我在文档中可以找到的全部内容。例如:

model_name = 'FooBar'
MyModel = apps.get_model('app_xyz', model_name)
MyModel
<class 'apps.app_xyz.models.FooBar'>
Run Code Online (Sandbox Code Playgroud)

如何获取 MyModel 的 ContentType?我唯一能想到的就是将 model_name 字符串设置为 lower 并直接查询 ContentTypes:

ct = ContentType.objects.get(model=model_name.lower())
Run Code Online (Sandbox Code Playgroud)

这看起来真的很脆弱,而且使用 lower() 有一种我不喜欢的代码味道。我查看了 FooBar 的方法、_methods 和 __methods,但无济于事。谢谢!

小智 5

from django.contrib.auth.models import User
cc = ContentType.objects.get_for_model(User)
Run Code Online (Sandbox Code Playgroud)

文档

  • 请解释你的答案。 (2认同)