【问题标题】:Django 1.5: How to use generic views?Django 1.5:如何使用通用视图?
【发布时间】:2013-03-07 08:46:36
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:
    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):
            ...
    

    【讨论】:

    • 这听起来很有希望。在接受它作为答案之前,给我一天的时间来测试它。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2014-04-25
    • 2014-10-05
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多