ValidationError消息不以我自己的形式出现

时间:2015-04-22 15:37:42

标签: django django-forms django-templates

我创建了一个自定义注册表单:

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?

1 个答案:

答案 0 :(得分:2)

您需要添加{{ form.mobile.errors }}才能显示mobile字段的错误。

有关详细信息,请参阅working with form templates文档。

您可能需要调查django crispy forms,这样可以轻松呈现引导表单。