响应DetailView子类中的表单POST

Lor*_*ein 5 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
Run Code Online (Sandbox Code Playgroud)

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

或者,对于此方案,在同一URL上响应POST是一个坏主意?

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

Ber*_*ant 10

目前还不是很清楚你想要对你的POST请求做什么,但是使用它django.views.generic.UpdateView代替可能是有意义的DetailView- 因为它还为你提供了一些处理表单处理的方法.

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

  • Django关于基于类的通用视图的文档仍然不是很令人满意,所以最好的办法是查看[code](https://code.djangoproject.com/browser/django/trunk/django/views/ generic/edit.py#L134)...还可以查看可用的基本视图/ mixins,由于它们的编号而首先有点令人困惑,但您将获得有价值的见解! (3认同)

Lor*_*ein 5

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

def post(self, request, *args, **kwargs):
    ...
Run Code Online (Sandbox Code Playgroud)