Django: переопределить admin/login с пользовательским loginview и authenticationform, но с тем же шаблоном

Я добавил поле срока действия к моему User. Теперь я хочу добавить пользовательское сообщение об ошибке при неудачном входе в систему, если срок действия учетной записи истек, потому что если я переопределю только метод ModelBackend'а can_authenticate, форма выдаст стандартную ошибку валидации, которая предполагает, что проблема кроется в учетных данных. Я предпочитаю ясность.

Поэтому я расширил AuthenticationForm и переписал его метод confirm_login_allowed, чтобы сделать проверку срока действия и вызвать ValidationError с новым добавленным сообщением об ошибке.

Однако, я получаю жалобы от Django, что шаблон не существует:

TemplateDoesNotExist в /admin/login/

registration/login.html

urls.py


from django.contrib.auth import views as auth_views
from my_app.auth.forms import AuthForm

urlpatterns = [
    # path("admin/", admin.site.urls),  # Have to comment out or the next item will not match
    re_path(r"^admin/login/$", auth_views.LoginView.as_view(form_class=AuthForm), name="login"),
    re_path(r"^logout/$", auth_views.LogoutView, name="logout"),
...
]

my_app/auth/forms.py

from django.contrib.auth.forms import AuthenticationForm
from django.core.exceptions import ValidationError

class AuthForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.error_messages["account_expired"] = "This account has expired."

    def confirm_login_allowed(self, user):
        super().confirm_login_allowed(user)

        if user.expired:
            raise ValidationError(self.error_messages["account_expired"], code="inactive")
Вернуться на верх