当在代理模型对象上使用时,ContentType.objects.get_for_model(obj)返回基类模型

JTN*_*JTN 3 python django django-models python-2.7 django-1.7

我有一个从另一个模型派生的代理模型。现在,我创建此代理模型的对象,并尝试使用ContentType.objects.get_for_model(obj)找出内容类型对象,它返回基类内容类型对象,而不是给我代理模型内容类型。我正在使用Django 1.7.8。

class BaseModel(models.Model):
    field1 = models.CharField(max_length=200)
    field1 = models.CharField(max_length=200)


class ProxyModel(BaseModel):
    class Meta:
        proxy = True
Run Code Online (Sandbox Code Playgroud)

现在我正在获得代理模型的对象

proxy_obj = ProxyModel.objects.get(field1=1)
Run Code Online (Sandbox Code Playgroud)

并尝试找到proxy_obj的内容类型类

content_type = ContentType.objects.get_for_model(proxy_obj)
Run Code Online (Sandbox Code Playgroud)

但这为我提供了BaseModel的内容类型对象,而不是ProxyModel。为什么这表现得很荒谬?还是我做错了什么?

v1k*_*k45 7

从django-docs获取get_for_model方法:

获取模型类或模型的实例,并返回表示该模型的ContentType实例。for_concrete_model=False 允许获取ContentType代理模型的。

你必须通过for_concrete_model=False使用get_for_model(),就像这样:

content_type = ContentType.objects.get_for_model(proxy_obj, for_concrete_model=False)
Run Code Online (Sandbox Code Playgroud)