我知道这很简单,但我遗漏了一些东西。因为我永远记不住这一点,我希望这可以在这里记录一个解决方案。
我想要做的就是为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!查找参数为{}
这感觉真的很傻。它应该“正常工作”,但我遗漏了一些明显的东西。
感谢您的帮助。
答案 0 :(得分:5)
在DetailView中,它更简单:您只需指定模型:
class AdventureDetail(DetailView):
""" Get a time entry detail view """
model = Page
template_name = "adventure/AdventureDetail.html"
就是这样。 DetailView将完成剩下的工作。
另一种方法是指定queryset:
class AdventureDetail(DetailView):
""" Get a time entry detail view """
queryset = Page.objects.all()
template_name = "adventure/AdventureDetail.html"
这将有相同的结果。
最后一种方法是覆盖get_object
方法。
查看here了解详情
答案 1 :(得分:3)
除了get_object_or_404
类之外,您没有将任何其他参数传递给Page
。所以现在你基本上都在查询所有页面。所以你需要这样做:
return get_object_or_404(Page, pk=self.kwargs.get('pk', None))
另外,为什么要覆盖get_object
? DetailView
已包含此功能,因此您只需拥有一个包含pk
的网址。
答案 2 :(得分: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")