Python Django:DetailView-pk或slug
旧视图.py 新视图.py 错误:必须使用对象pk或slug调用eneric detail view TestDetailView 问题:请告诉我,我应该如何在new views.py中传递id 似乎正确的决定是覆盖Python Django:DetailView-pk或slug,python,django,Python,Django,旧视图.py 新视图.py 错误:必须使用对象pk或slug调用eneric detail view TestDetailView 问题:请告诉我,我应该如何在new views.py中传递id 似乎正确的决定是覆盖get\u object,如下所示: def get_object(self): return get_object_or_404(TestGroup, id = id) {% url 'foo.views.testgroup_report_builder' gro
get\u object
,如下所示:
def get_object(self):
return get_object_or_404(TestGroup, id = id)
{% url 'foo.views.testgroup_report_builder' group.id %}
我也尝试过这个解决方案:
return TestDetailView.as_view(queryset = queryset, context_object_name = 'group')(request, pk = id)
但是我得到了'foo.views.testgroup_edit'的相反的结果,其中未找到参数'(u'group.id',)'和关键字参数'{}'。
我这样称呼它:
def get_object(self):
return get_object_or_404(TestGroup, id = id)
{% url 'foo.views.testgroup_report_builder' group.id %}
您不会像这样使用基于类的视图。他们是班级。您应该完全放弃
foo
函数,只需从url.py中引用TestDetailView。如果您需要在视图中执行一些额外的自定义逻辑(当前在foo中),那么就将TestDetailView子类化并在那里执行。我不太理解这一点。如果我们将所有代码移动到url.py,那么视图点是什么?对我来说,它将是空的。谁说过要将所有代码移动到url.py?您可以将代码保存在views.py、TestDetailView类或其子类中。您直接从url.py.Ok指向该类,看起来我开始理解了。这就是为什么它称为基于类。我直接从URL.py调用TestDetailView.as_view,但重写get()方法,所以它以我需要的方式处理请求。是的。尽管查看代码,但您可能希望覆盖的方法是获取上下文数据。