旧 views.py
from django.views.generic.detail import DetailView
...
def foo:
...
return object_detail(request, queryset, id, template_object_name = 'group')
新 views.py
class TestDetailView(DetailView):
def get_context_data(self, **kwargs):
context = super(TestDetailView, self).get_context_data(**kwargs)
return context
def foo:
...
return TestDetailView.as_view(queryset = queryset, context_object_name = 'group')(request)
错误:通用详细信息视图必须使用对象pk或slug调用TestDetailView。
问题:请告诉我,我应该如何在新的 views.py 中传递 id ?
看来,正确的决定是覆盖get_object
,像这样:
def get_object(self):
return get_object_or_404(TestGroup, id = id)
我也试过这个解决方案:
return TestDetailView.as_view(queryset = queryset, context_object_name = 'group')(request, pk = id)
但是我已经Reverse for 'foo.views.testgroup_edit' with arguments '(u'group.id',)' and keyword arguments '{}' not found.
我称之为:
{% url 'foo.views.testgroup_report_builder' group.id %}
答案 0 :(得分:1)
您不能使用这样的基于类的视图。他们是班级。你应该完全摆脱你的foo
函数,只需从urls.py中引用TestDetailView。如果你需要在你的视图中做一些额外的自定义逻辑,当前在foo中,那么继承TestDetailView并在那里进行。