Переопределить поля Django AuthenticationForm - PullRequest
0 голосов
/ 13 апреля 2020

Я использую сервер аутентификации Django, и он работает нормально, но я хочу присвоить полям имени пользователя и пароля собственный класс CSS. Я пытался найти решение, но я не могу найти ничего здесь или где-либо еще. Это то, что я сделал до сих пор:

project / forms.py:

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class LoginForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control form-control-lg'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control form-control-lg'}))

project / urls.py:

from django.contrib import admin
from django.urls import path, include
from .forms import LoginForm

urlpatterns = [
    path('accounts/', include('django.contrib.auth.urls'), {'authentication_form': LoginForm}),
]

account / login. html:

<form method="POST">
    {% csrf_token %}
    <div class="form-group">
        {{ form.username }}
        {{ form.password }}
    <button type="submit" class="btn btn-primary btn-lg btn-block">Sign in</button>
</form>

Система входа в систему работает, но я не могу отобразить изменения CSS. Я проверил поля имени пользователя и пароля, но они вообще не отображаются в браузере. Я предполагаю, что я что-то упустил где-то?

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Причина, по которой это не сработало, заключалась в том, что вы добавляли {'authentication_form': LoginForm} с путем, в котором есть include (....), что невозможно, вам нужно было только передать его на URL логина (или те, для которых вы переопределяете эту форму):

from django.contrib.auth.views import LoginView

urlpatterns = [
    path('accounts/login/', LoginView.as_view(authentication_form=LoginForm)),
    path('accounts/', include('django.contrib.auth.urls')),
]
1 голос
/ 13 апреля 2020

Не уверен, как вы можете сделать это напрямую, но я использую widget-твики, чтобы сделать это, и он прекрасно работает (также делает все уведомления об ошибках). Вам не нужно ничего устанавливать в форме, все сделано в шаблоне. Строка в шаблоне будет выглядеть так:

    {% with "form-control input-field-"|add:form.username.name as field_class %}{% render_field form.username class=field_class %}{% endwith %}

Это даст вам отдельный класс для каждого поля ввода. Взгляните на https://github.com/jazzband/django-widget-tweaks.

...