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

时间:2016-04-06 10:25:10

标签: python django python-2.7 django-models 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

现在我得到代理模型的对象

proxy_obj = ProxyModel.objects.get(field1=1)

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

content_type = ContentType.objects.get_for_model(proxy_obj)

但这会产生BaseModel的内容类型对象而不是ProxyModel。为什么这种表现方式荒谬?或者我做错了什么?

3 个答案:

答案 0 :(得分:5)

来自get_for_model方法的django-docs:

  

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

您必须将for_concrete_model=Falseget_for_model()一起传递,如下所示:

content_type = ContentType.objects.get_for_model(proxy_obj, for_concrete_model=False)

答案 1 :(得分:1)

为了获取代理模型的ContentType,您需要将参数 for_concrete_model = False 传递到get_for_model()

示例:

content_type = ContentType.objects.get_for_model(proxy_obj,
                                                 for_concrete_model=False)

有关详细信息,请参阅official docs

答案 2 :(得分:0)

proxy_obj._meta.verbose_name.title() I think is better