问题描述
我有一张注册表,我在用脆皮。我想让输入字段看起来更好,所以我想向每个输入字段添加一个类,但是站点仅使用该类呈现第一个输入字段。 (这是我的第一个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>
解决方法
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',Column('password1',Column('password2',css_class='form-row'
)
)
更多详细信息,请参阅此document
,
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username','password2']
#override
def __init__(self,**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'