2013-04-28 91 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。