对我来说,这很奇怪,也许不是,我缺少明显的东西:
表格
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>
对我来说看起来不错,我只是在渲染一个表单。我只想在输入的类中添加“ form-control”。奇怪的是,它仅在“ first_name”,“ last_name”和“ email_address”字段中添加了“ form-control”。 ?输入“ username”,“ password1”和“ password2”没有表单控制类。
这是渲染的html:
最佳答案
如果查看UserCreationForm
的源代码,将会看到这三个字段是声明性定义的:
class UserCreationForm(forms.ModelForm):
...
username = forms.RegexField(...)
password1 = forms.CharField(...)
password2 = forms.CharField(...)
...
根据the documentation,您不能在
Meta
中覆盖它们:声明性定义的字段保持原样,因此将忽略对Meta属性(如小部件,标签,help_texts或error_messages)进行的任何自定义;这些仅适用于自动生成的字段。
因此,最好的选择是将这些声明复制到您自己的类中,并在那里覆盖小部件选项。
更新:另一个选项是按照@catavaran建议修改窗体的
__init__
方法中的小部件属性。有关示例,请参见this answer。关于python - Django的。 UserCreationForm无法正确呈现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29022765/