3 回答

TA貢獻1795條經(jīng)驗 獲得超7個贊
帖子由post基于類的視圖的方法處理:
class BlogDetail(DetailView):
# ...
def post(self, request, *args, **kwargs):
# all your form processing
Django 附帶了多個視圖,它們已經(jīng)提供了表單處理過程的各種掛鉤,例如 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條經(jīng)驗 獲得超3個贊
你不需要DetailView
. 您只需使用 CreateView 即可。我認為你已經(jīng)正確覆蓋了所有內(nèi)容,以便能夠放棄 DetailView,除了 get_form_kwargs() 之外。
然而...
我通常會以不同的方式處理這個問題,因為它很混亂而且很老套。相反,您可以通過 get_context_data() 將表單添加到 DetailView,然后在模板 post 中添加到/blog/{id}/comment/create
,其中您有 CreateView。這讓事情變得簡單多了。

TA貢獻1859條經(jīng)驗 獲得超6個贊
要允許向您的視圖發(fā)送發(fā)布請求,請編寫一個def post(self, request, *args, **kwargs)
將接收發(fā)布請求的函數(shù)。如果您想像處理 get 一樣處理此問題,請將其重定向到 get 函數(shù)
def post(self, request, *args, **kwargs): return self.get(request, *args, **kwargs)
添加回答
舉報