Пользовательские формы Django (хрустящие)

#python #django #custom-fields

#python #django #пользовательские поля

Вопрос:

У меня есть регистрационная форма, я использую crispy. Я хочу, чтобы поля ввода выглядели лучше, поэтому я хотел добавить класс к каждому из них, но сайт отображает только первое поле ввода с классом. (Это мой первый проект django, поэтому я довольно новичок в этом)

Вот мой forms.py файл:

 from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm



class UserRegisterForm(UserCreationForm):
email = forms.EmailField()

class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2']
    widgets = {
        'username': forms.TextInput(attrs={'class': 'form-control input'}),

        'email': forms.EmailInput(attrs={'class': 'form-control input'}),

        'password1': forms.PasswordInput(attrs={'class': 'form-control input'}),

        'password2': forms.PasswordInput(attrs={'class': 'form-control input'}),

        

    }
  

Вот шаблон:

 <div class="sign-up">
   

<form class="form" method="POST">
    {% csrf_token %} 
    <fieldset class="form-group">
        <legend class="border-bottom mb-4, sign-up__header">Join Today</legend>
        {{ form|crispy }}
    </fieldset>
    <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Sign up</button>
    </div>
</form>

</div>
  

Ответ №1:

 from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit, Row, Column



class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']
        
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
            Row(
                Column('username', css_class='form-group col-md-3 mb-0 input'),
                Column('email', css_class='form-group col-md-3 mb-0 input'),
                Column('password1', css_class='form-group col-md-3 mb-0 input'),
                Column('password2', css_class='form-group col-md-3 mb-0 input'),
                css_class='form-row'
            )
        )  

Более подробную информацию см. в этом документе

Комментарии:

1. Я пробовал это, но все равно он применяет стили только к полю имени пользователя

Ответ №2:

 class UserRegisterForm(UserCreationForm):
email = forms.EmailField()

class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2']
#override
def __init__(self, *args, **kwargs):
    super(UserRegisterForm, self).__init__(*args, **kwargs)

    #Custom classok
    self.fields['username'].widget.attrs['class'] = 'input'
    self.fields['email'].widget.attrs['class'] = 'input'
    self.fields['password1'].widget.attrs['class'] = 'input'
    self.fields['password2'].widget.attrs['class'] = 'input'