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 %}
Теперь, наконец, капча появилась на моей странице входа в админку.