I am trying to create form for user registration and add some custom fields. For doing that, I've subclassed UserCretionForm and added fields as shown in django documentation. Then I've created function-based view and template based on this form. Now, I can successfully create user and this user is added to admin panel as expected. Problem is that, I can't add class and style for this form's fields. Widgets are not working except for username field. I'm adding my scripts here for illustrating my problem more accurately:
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.models import Userclass SignUpForm(UserCreationForm):first_name = forms.CharField(max_length=32, help_text='First name')last_name = forms.CharField(max_length=32, help_text='Last name')email = forms.EmailField(max_length=64, help_text='Enter a valid email address')class Meta(UserCreationForm.Meta):model = User# I've tried both of these 'fields' declaration, result is the same# fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2', )fields = UserCreationForm.Meta.fields + ('first_name', 'last_name', 'email',)widgets = {'username': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Username'}),'first_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'First Name'}),'last_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Last Name'}),'email': forms.EmailInput(attrs={'class': 'form-control', 'placeholder': 'Email'}),'password1': forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}),'password2': forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password Again'}),}
views.py
from django.contrib.auth import login, authenticate
from django.contrib.auth.views import LoginView
from django.shortcuts import render, redirectfrom .forms import SignUpForm, SignInFormdef signup(request):if request.method == 'POST':form = SignUpForm(request.POST)if form.is_valid():form.save()username = form.cleaned_data.get('username')raw_password = form.cleaned_data.get('password1')user = authenticate(username=username, password=raw_password)login(request, user)return redirect('/')else:form = SignUpForm()return render
Widgets in 'forms.py' are not working except for 'username' field. In other words, in web browser 'username' input is shown with "class='form-control'" and "placeholder='Username'", but other fields don't have class and placeholder attribute as I expected. What can be the reason?