Проблема в том, что в form_valid
методе, который вы вызываете form.get_user()
, который аутентифицирует / получает пользователя и правильно проверяет change_password
, но он не регистрирует пользователя, что означает, что пользователь, выполняющий запросы, являетсяпо-прежнему анонимно для системы.Таким образом, в то время как пользователь перенаправляется, он не проходит проверку подлинности, что означает, что request.user
объекты имеют тип AnonymousUser
, который не живет в базе данных, следовательно, Django не предоставляет представление БД для AnonymousUser ошибка.
И когда вы используете декоратор @login_required
, пользователь перенаправляется на страницу входа, потому что он не вошел в систему, и декоратор требует, чтобы пользователь вошел в систему, чтобы увидеть представление, которое он декорирует..
URL, который вы видите users/login/?next=/users/change-password/
, в основном работает как декоратор login_required
и выполняет две функции: 1. перенаправляет анонимного пользователя на страницу входа (часть URL users/login
)2. как только они успешно вошли в систему, перенаправьте их туда, откуда они пришли (?next=/users/change-password/
)
Я предлагаю вам передать имя пользователя, который пытался войти в систему, но должен изменить свой пароль наchange_password
вид и там есть форма, ожидающая пользователя, который запрашивает текущий пароль, новый и подтверждение нового пароляартиллерияЭто самый простой способ сделать то, что вы хотите, но вам нужно будет подтвердить, что текущий пароль пользователя снова верен.
Извините за вводящий в заблуждение первый ответ, я не правильно прочитал вопросв первый раз, надеюсь, это имеет больше смысла:)