2012-01-11 49 views
3
的一个子类

我有一个使用的基于类的通用视图(从django.views.generic.DetailView导出)之一,具有定制形式的图:响应表单POST中的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并不适合)。

回答

9

你不太清楚你想要怎么处理你的POST请求,但是使用django.views.generic.UpdateView而不是DetailView也可以 - 因为它也给你一些处理表单处理的方法。

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

+0

你可以发布一个指向描述这种方法的期望参数Django文档?我无法找到它。 – 2012-01-11 14:24:58

+3

Django关于基于类的泛型视图的文档仍然不是很令人满意,所以最好的做法是看看[code](https://code.djangoproject.com/browser/django/trunk/django/views /generic/edit.py#L134)...还可以看看可用的基本视图/ mixin,由于它们的编号有点令人困惑,但您会得到有价值的见解! – 2012-01-11 14:30:38

4

望着Django的代码,后()方法应该是这样的:

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