Django - 按型号名称获取ContentType模型(通用关系)

时间:2011-02-25 16:50:26

标签: python django content-type

我现在正在考虑这个问题,

我正在创建一个聊天应用程序,在chat.models中指定了一个类Room,但是,Room可以与我项目中的任何内容相关,因为它在其外键中使用了泛型关系。

有没有办法知道哪个型号的房间只知道型号名称?

像:

ctype = 'user'

related_to_user = Room.objects.filter(content_type=ctype)

我遇到的问题是,下面的代码在视图中:

doc = get_object_or_404(Document, id=id)
# get *or create* a chat room attached to this document
room = Room.objects.get_or_create(doc)

如果我不想使用Document模型,如果我想要一个与字符串相关联的模型,一个可以是任何东西的字符串,而不必编写大量的if来获取特定字符串的特定模型。有没有办法通过它的'名字'找到一个模型?

由于

1 个答案:

答案 0 :(得分:39)

http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#methods-on-contenttype-instances

user_type = ContentType.objects.get(app_label="auth", model="user")
user_type = ContentType.objects.get(model="user")
# but this can throw an error if you have 2 models with the same name.

非常类似于django的get_model

from django.db.models import get_model
user_model = get_model('auth', 'user')

准确使用您的示例:

ctype = ContentType.objects.get(model='user')
related_to_user = Room.objects.filter(content_type=ctype)