3 回答
TA贡献1795条经验 获得超7个赞
帖子由post基于类的视图的方法处理:
class BlogDetail(DetailView):
# ...
def post(self, request, *args, **kwargs):
# all your form processing
Django 附带了多个视图,它们已经提供了表单处理过程的各种挂钩,例如 FormView,您可以利用它们:
class BlogDetail(DetailView, FormView):
form_class = CommentForm
def form_valid(self, form):
c_type = form.cleaned_data.get('content_type')
# ...
def get_initial(self):
obj = self.get_object()
return {
'content_type': obj.get_content_type,
'object_id': obj.id
}
# ....
默认情况下,表单被传递"form"到上下文中。
TA贡献1828条经验 获得超3个赞
你不需要DetailView
. 您只需使用 CreateView 即可。我认为你已经正确覆盖了所有内容,以便能够放弃 DetailView,除了 get_form_kwargs() 之外。
然而...
我通常会以不同的方式处理这个问题,因为它很混乱而且很老套。相反,您可以通过 get_context_data() 将表单添加到 DetailView,然后在模板 post 中添加到/blog/{id}/comment/create
,其中您有 CreateView。这让事情变得简单多了。
TA贡献1859条经验 获得超6个赞
要允许向您的视图发送发布请求,请编写一个def post(self, request, *args, **kwargs)
将接收发布请求的函数。如果您想像处理 get 一样处理此问题,请将其重定向到 get 函数
def post(self, request, *args, **kwargs): return self.get(request, *args, **kwargs)
添加回答
举报