2016-04-06 26 views
1

我有一個從另一個模型派生的代理模型。現在我創建此代理模型的對象,並嘗試使用ContentType.objects.get_for_model(obj)查找內容類型對象,它返回基類內容類型對象,而不是向我提供代理模型內容類型。我使用Django 1.7.8。ContentType.objects.get_for_model(obj)在代理模型對象上使用時返回基類模型

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

從Django的文檔爲get_for_model方法:

它可以是一個模型類或模型的一個實例,並返回一個表示該模型的 的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) 
0

爲了得到一個代理模式的contentType中,你需要在參數for_concrete_model =假get_for_model()通過。

實施例:

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

更多信息,請參見official docs