使用一個通用的FormView我想反映一些關於已提交給用戶的POST數據,但我不知道如何最好地做到這一點。確認通用FormView的崗位上取得成功回用戶用POST數據
class MyView(generic.FormView):
form_class = MyForm
def get_success_url(self):
return reverse('success')
reverse('success')
重定向到一個簡單的
class SuccessView(generic.TemplateView):
template_name = 'success.html'
有沒有辦法,我可以通過get_success_url
呼叫SuccessView
訪問params
對象的方式,或者是有一個更好的(和簡單)的方式來做到這一點? TIA丹
UPDATE(我的解決方案,但感謝的想法)
我居然發現,這是最簡單的方法(對我來說)來解決這個問題:
class SuccessMixin(object):
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form, **kwargs)
def form_valid(self, form):
# this is my post processing step which returns the
# feedback data that I want to pass to the user
form_data = form.get_some_data_from_form()
return render_to_response('submitted.html',
{'form_data': form_data,},
context_instance=RequestContext(self.request))
每個視圖繼承此mixin,如果表單有效,那麼我會從中提取反饋數據並將其作爲響應呈現 - 完全繞過get_success_url重定向。我已經刪除了get_success_url
和SuccessView
。
h出入該消息毫米 - 所有表格都是唯一的,所以使用Sessions會抹掉DRY(將任何表單中的每個字段加載到會話中)。謝謝你的想法。 – danodonovan 2012-02-13 22:42:07
爲什麼不製作所有表單繼承的父表單。重寫__init__或者is_valid方法(很難說沒有任何關於如何在視圖中使用表單的例子,視圖如何不同,表單如何不同等),將請求的相關部分加載到用戶會話從那裏?我不明白在哪裏使用這種方法會複製任何代碼。 – fourk 2012-02-13 22:52:45