我创建了一个自定义注册表单:
class MyRegistrationForm(UserCreationForm):
mobile = models.CharField(max_length=16)
address = models.CharField(max_length=100)
class Meta():
model = CustomUser
fields = ['username', 'password1', 'password2', 'first_name', 'last_name', 'email', 'mobile', 'address']
def clean_mobile(self):
mobile = self.cleaned_data['mobile']
if CustomUser.objects.filter(mobile=mobile).exists():
raise ValidationError('Mobile already exists')
return mobile
def save(self, commit=True):
user = super(MyRegistrationForm, self).save(commit=False)
user.mobile = self.cleaned_data['mobile']
user.address = self.cleaned_data['address']
if commit:
user.save()
return user
在我的模板中,我不只是编写`{{form}}',而是使用我的bootstrap模板进行注册。它看起来像:
<form class="form-horizontal" action="{% url 'register' %}" method="post">
{% csrf_token %}
<div class="control-group">
<label class="control-label" for="username1" >Ім'я користувача <sup>*</sup></label>
<div class="controls">
<input type="text" id="username1" placeholder="Нік" name="username">
</div>
</div>
<div class="control-group">
<label class="control-label" for="password_1" >Пароль <sup>*</sup></label>
<div class="controls">
<input type="password" id="password_1" placeholder="Введіть пароль" name="password1">
</div>
</div>
<div class="control-group">
<label class="control-label" for="password_2" >Повторіть пароль <sup>*</sup></label>
<div class="controls">
<input type="password" id="password_2" placeholder="Повторіть пароль" name="password2">
</div>
</div>
但是当调用clean_mobile
方法并引发ValidationError
时,不会显示任何错误。如何解决这个问题?或者我可以在模板{{form}}
中使用,但我需要使用bootstrap css?
答案 0 :(得分:2)
您需要添加{{ form.mobile.errors }}
才能显示mobile
字段的错误。
有关详细信息,请参阅working with form templates文档。
您可能需要调查django crispy forms,这样可以轻松呈现引导表单。