我正在尝试使用Django 1.5中的通用视图,这让人感到困惑。 到目前为止,我一直在使用views.py中的函数。我同意函数方法有更多的样板代码,但同时你作为开发人员可以更多地控制它。尽管如此,为了学习。让我们考虑这个部分代码:
if request.method == 'POST':
if 'invitation' in request.session:
invitation = Invitation.objects.get(id=request.session['invitation'])
profile = invitation.sender.get_profile()
form = RegistrationForm(request.POST, is_accept_invite = True, _email = invitation.email)
else:
form = RegistrationForm(request.POST)
if form.is_valid():
...
我理解它的方式,通用视图考虑三种状态:GET,POST - >有效,POST - >无效()。
但上面的代码是POST - > form.validation之前的条件,以相应地实例化表单
这是我提出的一般观点:
class RegisterView(FormView):
template_name = 'register.html'
form_class = RegisterForm
success_url = '/registration_successfull/'
def form_valid(self, form):
...
def form_invalid(self, form):
...
我想我需要覆盖get_form(form_class)
或get_form_kwargs()
以检查我的request.session并相应地实例化RegistrationForm。那是对的吗?有什么例子怎么做?我在文档中找不到任何示例。
答案 0 :(得分:0)
class RegisterView(FormView):
template_name = 'register.html'
form_class = RegisterForm
success_url = '/registration_successfull/'
def get_form_kwargs(self):
kwargs = super(RegisterView, self).get_form_kwargs()
if 'invitation' in self.request.session:
kwargs['invitation'] = invitation = Invitation.objects.get(id=self.request.session['invitation'])
kwargs['profile'] = invitation.sender.get_profile()
return kwargs
def form_valid(self, form):
...
def form_invalid(self, form):
...