4

我知道这真的很简单,但我错过了一些东西。而且因为我不记得这一点,我希望这可以在这里记录一个解决方案。

我要做的就是在 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)

但我收到“多个对象返回错误”

MultipleObjectsReturned at /1/ get() 返回了不止一页——它返回了 5!查找参数为 {}

这感觉真的很傻。它应该“正常工作”,但我错过了一些明显的东西。

谢谢您的帮助。

4

3 回答 3

6

在 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方法。

这里了解详情

于 2013-04-28T22:28:26.503 回答
3

get_object_or_404除了Page类之外,您没有将任何其他参数传递给。所以现在你基本上是在查询所有页面。所以你需要这样做:

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

另外,你为什么要压倒一切get_objectDetailView已经包含此功能,因此您需要做的就是在其中包含一个URL pk

于 2013-04-28T22:23:38.727 回答
0

在views.py

from django.views.generic import DetailView
# Import your model that you want to use in details view for example
from .models import Post

class PostDetailView(DetailView):
  model = Post

然后创建一个模板,名称转换如下

<appname>/<model_viewtype>.html

在 urls.py 首先导入你创建的类视图。在我们的例子中是

from .views import PostDetailView

然后

path("post/<int:pk>/", views.PostDetailView.as_view(), name="PostDetailView")
于 2020-05-02T10:29:26.333 回答