如何为内置表单自定义Django Form ValidationErrors?

时间:2012-06-20 23:35:08

标签: django django-forms

我正在利用这些内置的Django表单,我遇到了一个小问题。

  • class AdminPasswordChangeForm
  • class AuthenticationForm
  • class PasswordChangeForm
  • class PasswordResetForm
  • class SetPasswordForm
  • class UserChangeForm
  • class UserCreationForm

例如,UserCreationForm会生成多个验证错误,我可以使用{{ form.errors }}等标记在我的模板中显示,甚至可以使用与{{ form.username.errors }}等特定字段相关的标记。< / p>

我知道如何自定义这些错误消息的样式,但是如何自定义文本?我能够简单地检查条件语句(例如{% if form.password.errors %})是否存在错误,并将自己的自定义文本放在该块中。但是,这让我对所引发的错误类型视而不见。

例如,我希望能够确定触发的错误是duplicate_username还是password_mismatch,以便我可以在模板中编写自己的错误。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

一般来说,您可以自定义下面的清洁方法:

class EventDetailsForm(form.ModelForm):
    class Meta:
        model = Event
        fields = ('name',)
        layout = (
                Fieldset('',
                'name',),
                )

    def clean_name(self):
        event_name = self.cleaned_data['name']
        if Event.objects.filter(name=event_name, status='Live').\
                exclude(id=self.instance.id).exists():
            raise forms.ValidationError('This Name is already in use')
        else:
            return event_name

因此,要重新使用django的表单,只需将其子类化,添加其他验证逻辑并在视图函数中调用该表单。