2013-10-07 152 views
0

有一個項目在哪裏models.py看起來是這樣的:Django模型。檢索類的模型

class Page(models.Model) 
    #fields 

class News(Page) 
    #no fields 

當我想要檢索PageNews頁我做這樣的事情:

page = get_object_or_404(Page, id=page_id)

但是,當我給這個:page.__class__我總是得到這個:main.models.Page

有沒有辦法知道頁面是否實際上是Page類或News類,而不檢查News中是否存在page_id

回答

1

只給定page_id價值是沒有辦法來測試ID值是否存在如News表中除了Page表中的其他條目比試圖檢索它(例如使用page.news,並在其不存在的情況下捕獲DoesNotExist例外)或針對News管理器的直接查詢。針對Page模型的經理的查詢將返回Page個實例 - 您必須先在您的視圖中先驗地知道您想要News,或者測試是否存在。

-1

你可以看看isinstance

page = get_object_or_404(Page, id=page_id)  
isinstance(page, News): 
+0

這永遠不會返回「真」。如果get_object_or_404返回任何內容而不是引發異常,那麼'get_object_or_404'將返回你給它的類的一個實例。 –

+0

是的,我起初誤解了這個問題,並意識到這不會工作,因爲您正在檢索一個Page對象實例 – Charl