Функция переписывания в класс - PullRequest
1 голос
/ 10 мая 2019

У меня есть функция для изменения пароля пользователя, теперь я хотел бы переписать его в представление класса, оно выдает мне ошибку:

__init__() missing 1 required positional argument: 'user'

Функция:

def change_password(request):
    if request.method == 'POST':
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            update_session_auth_hash(request, user)
            messages.success(request, 'Your password was successfully updated!')
            return redirect('profile')
        else:
            messages.error(request, 'Please correct the error below.')
    else:
        form = PasswordChangeForm(request.user)
    return render(request, 'accounts/change_password.html', {
        'form': form
    })

Класс просмотра пока

class ChangePasswordView(FormValidMessageMixin, FormInvalidMessageMixin, FormView):
    form_class = PasswordChangeForm
    template_name = 'accounts/change_password.html'
    success_url = reverse_lazy('profile')

    def get_form_valid_message(self):
        return 'Your password was successfully updated!'

    def get_form_invalid_message(self):
        return 'Please correct the error below.'

    def form_valid(self, form):
        form.author = self.request.user
        form.save()
        return super().form_valid(form)

urls.py

path('change-password/', ChangePasswordView.as_view(), name='change-password'),

1 Ответ

2 голосов
/ 10 мая 2019

Я предполагаю, что ваша форма требует аргумента user.Поэтому вам нужно переопределить метод get_form_kwargs() в представлении формы, чтобы передать его следующим образом:

class ChangePasswordView(FormValidMessageMixin, FormInvalidMessageMixin, FormView):
    form_class = PasswordChangeForm
    # rest of the code
    def get_form_kwargs(self, *args, **kwargs):
       form_kwargs = super().get_form_kwargs(*args, **kwargs)
       form_kwargs['user'] = self.request.user
       return form_kwargs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...