Django 1.5:如何使用通用视图?

时间:2013-03-18 20:45:08

标签: django django-generic-views django-1.5

我正在尝试使用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。那是对的吗?有什么例子怎么做?我在文档中找不到任何示例。

1 个答案:

答案 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):
        ...