Django:DetailView - pk或slug

时间:2014-07-17 10:06:09

标签: python django

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 %}

1 个答案:

答案 0 :(得分:1)

您不能使用这样的基于类的视图。他们是班级。你应该完全摆脱你的foo函数,只需从urls.py中引用TestDetailView。如果你需要在你的视图中做一些额外的自定义逻辑,当前在foo中,那么继承TestDetailView并在那里进行。