2013-04-28 133 views
3

我知道這非常簡單,但我錯過了一些東西。因爲我無法記住這一點,我希望這可以在這裏記錄一個解決方案。用基於類的視圖編寫Django詳細視圖

我想要做的就是在URL中傳遞對象的PK並獲取詳細視圖。

網址:

url(regex=r'^(?P<pk>\d+)/$', 
    view=AdventureDetail.as_view(), 
    name='adventure_detail', 
), 

查看:

class AdventureDetail(DetailView): 
""" Get a time entry detail view """ 

    template_name = "adventure/AdventureDetail.html" 

    def get_object(self): 
     return get_object_or_404(Page) 

但我發現了一個在/ 1/ GET 「多個對象返回錯誤」

MultipleObjectsReturned()返回多於一頁 - 它返回5!查找參數是{}

這感覺真的很愚蠢。它應該「只是工作」,但我錯過了一些明顯的東西。

感謝您的幫助。

回答

5

在的DetailView更簡單:你可以指定型號:

class AdventureDetail(DetailView): 
""" Get a time entry detail view """ 

    model = Page 
    template_name = "adventure/AdventureDetail.html" 

而這一切。 DetailView將完成剩下的工作。

另一種方法是指定查詢集:

class AdventureDetail(DetailView): 
""" Get a time entry detail view """ 

    queryset = Page.objects.all() 
    template_name = "adventure/AdventureDetail.html" 

這將有同樣的結果。

而最後一種方法是覆蓋get_object方法。

請看here瞭解詳情

3

除了Page類以外,您沒有將任何其他參數傳遞到get_object_or_404。所以現在你基本上查詢所有頁面。所以你需要這樣做:

return get_object_or_404(Page, pk=self.kwargs.get('pk', None)) 

另外,你爲什麼壓倒get_objectDetailView已包含此功能,因此您所需要做的只是在其中包含一個包含pk的URL。