响应DetailView子类中的表单POST

时间:2012-01-11 12:34:59

标签: django

我有一个视图,它使用一个基于类的通用视图(源自django.views.generic.DetailView),带有自定义表单:

from django.views.generic import DetailView

class MyDetailView(DetailView):
    model=MyModel

    def get_object(self):
        object = MyModel.objects.get(uuid=self.kwargs['uuid'])

    def get_context_data(self, **kwargs):
        form = MyForm
        context = super(MyDetailView, self).get_context_data(**kwargs)
        context['form'] = form
        return context

我希望表单提交的POST转到与GET相同的URL。是否可以修改此视图代码,以便它也可以响应POST?如果是这样,怎么样?我是否需要从另一个mixin类继承?添加什么方法来处理表单数据的名称是什么?

或者,对于这种情况,在同一URL响应POST是一个坏主意吗?

(注意:表单不会修改正在显示的MyModel对象。而是用于创建不同类型的模型对象,因此UpdateView不太合适。)

2 个答案:

答案 0 :(得分:9)

您对POST请求的要求并不十分清楚,但使用django.views.generic.UpdateView代替DetailView可能有意义 - 因为它还为您提供了一些处理表单处理的方法。

要将POST请求的处理添加到详细信息视图,post()方法就足够了!

答案 1 :(得分:4)

查看Django代码,post()方法应如下所示:

def post(self, request, *args, **kwargs):
    ...