对我而言,这很奇怪,也许不是,我遗漏了一些明显的东西:
forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class formRegistro(UserCreationForm):
class Meta:
model = User
fields = ("first_name", "last_name", "email", "username", "password1", "password2")
widgets = {
'first_name': forms.TextInput(attrs={'class':'form-control'}),
'last_name': forms.TextInput(attrs={'class':'form-control'}),
'email': forms.TextInput(attrs={'class':'form-control'}),
'username': forms.TextInput(attrs={'class':'form-control'}),
'password1': forms.PasswordInput(attrs={'class':'form-control'}),
'password2': forms.PasswordInput(attrs={'class':'form-control'})
}
views.py
def registro(request):
template = "perfiles/registro.html"
form = formRegistro()
context = {'form' : form}
return render(request, template, context)
html registro.html
<form class="form-horizontal" action="{% url 'perfiles:registro' %}" method="post">
{% csrf_token %}
<fieldset>
{{form}}
</fieldset>
<input type="submit" value="Submit">
</form>
我看起来很好,我只是在渲染表格。我想要的只是在输入的类中添加“表单控件”。奇怪的是,它只在“first_name”,“last_name”和“email_address”字段中添加了“form-control”。 ?¡输入“username”,“password1”和“password2”没有表单控制类。
这是渲染的html:
答案 0 :(得分:3)
如果查看UserCreationForm
的源代码,您会看到这三个字段是以声明方式定义的:
class UserCreationForm(forms.ModelForm):
...
username = forms.RegexField(...)
password1 = forms.CharField(...)
password2 = forms.CharField(...)
...
根据the documentation,您无法在Meta
中覆盖它们:
以声明方式定义的字段保持原样,因此忽略对元素属性(如窗口小部件,标签,help_texts或error_messages)所做的任何自定义;这些仅适用于自动生成的字段。
因此,您最好的选择是将这些声明复制到您自己的类中,并覆盖那里的窗口小部件选项。
更新:另一个选项是修改表单的__init__
方法中的小部件属性,如@catavaran建议的那样。有关示例,请参阅this answer。