且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

将基于函数的视图转换为只有表单而没有模型(对象)的基于类的视图

更新时间:2022-01-19 07:45:24

不需要涉及模型——你可以使用 FormView.它看起来像这样:

There doesn't need to be a model involved -- you can use a FormView. It would look something like this:

from django.core.urlresolvers import reverse
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from django.views.generic.edit import FormView

from myapp.forms import PasswordChangeFormPrivate

class ProfileChangePassword(FormView):
    form_class = PasswordChangeFormPrivate
    success_url = reverse('profile_view_details')
    template_name = 'profiles/profile_change_password.html'

    def get_form_kwargs(self):
        kwargs = super(ProfileChangePassword, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

    def form_valid(self, form):
        form.save()
        messages.add_message(self.request, messages.INFO, _('profile changed'))
        return super(ProfileChangePassword, self).form_valid(form)

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(ProfileChangePassword, self).dispatch(*args, **kwargs)

我不知道你为什么有

user = get_object_or_404(User, username__iexact=request.user.username)

无论如何您都需要登录表单,因此 request.user 保证是有效用户.

You require login for the form anyway, so request.user is guaranteed to be a valid user.