0

我正在尝试使用 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 -> Valid,POST -> invalid()。

但是上面的代码是 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。那是对的吗?有什么例子可以做到这一点吗?我在文档中找不到任何示例。

4

1 回答 1

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):
        ...
于 2013-03-18T21:09:01.723 回答