Django Форма входа в систему администратора

Как изменить форму входа, используемую django admin (хочу добавить поле captcha)? Я использую шаблон cookiecutter и следовал предложениям в других ответах SO и руководствах:

forms.py

class AuthAdminForm(AuthenticationForm):
    captcha = ReCaptchaField(widget=ReCaptchaV3)
    show_something_different = forms.TextInput()

    class Meta(AuthenticationForm):
        fields = ('email', 'password', 'show_something_different', 'captcha')   

urls.py

from django.contrib import admin
from myapp.forms import AuthAdminForm
admin.autodiscover()
admin.site.login_form = AuthAdminForm
admin.site.login_template = 'admin/login.html'
urlpatterns = [
    # Django Admin, use {% url 'admin:index' %}
   path(settings.ADMIN_URL, admin.site.urls),
   ...]

Я смог добавить файл admin/login.html в папку templates и расширить его. Это работает для добавления google js в заголовок (его можно увидеть в источнике). Но поле captcha и мое фиктивное дополнительное поле не отображаются.

Я был на правильном пути, но меня зацепило то, что шаблон login.html не отображает все поля, присутствующие в форме (именно поэтому мое фиктивное тестовое поле так и не появилось). Поэтому вместо расширения login.html я скопировал все содержимое в свой собственный файл в templates/admin/login.html, а затем добавил поле captcha вручную:

<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
  <div class="form-row">
    {{ form.captcha }}
    {{ form.username.errors }}
    {{ form.username.label_tag }} {{ form.username }}
  </div>

base.html может быть расширен следующим образом:

{% block extrahead %}
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-xxx"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-xxx');
    </script>
{% endblock %}

Теперь, наконец, капча появилась на моей странице входа в админку.

Вернуться на верх