【问题标题】:Model Form validation is not working...I dont get why模型表单验证不起作用...我不明白为什么
【发布时间】:2013-01-16 22:58:11
【问题描述】:

模型.py

from django.core.exceptions import ValidationError

def surname_validate(value):
if value == "123":
    raise ValidationError('is not an even number')


class Member(models.Model):
surname=models.CharField(max_length=50,validators=[surname_validate])
other_names=models.CharField(max_length=150,null=True, blank=True)

forms.py

class MemberEditForm(forms.ModelForm):
class Meta:
    model=Member

当我尝试保存没有输入的表单时,我收到默认的“此字段是必需的”错误,因此我知道我的观点是正确的。问题是我对姓氏字段的验证根本不起作用,我不明白。我在这里做错了什么。为什么它不起作用???这很令人沮丧

【问题讨论】:

  • @Carl Meyer 你能帮帮我吗

标签: django django-models django-forms validation model-validation


【解决方案1】:

实际上Model Validation 不适用于ModelForm。如果您想在表单中验证surname,则必须在其 clean 方法中为表单编写验证。

所以,你的表单必须是这样的:

class MemberEditForm(forms.ModelForm):

    class Meta:
        model = Member

    surname = forms.CharField(max_length = 50, required = True, error_messages = {'my_error': 'is not an even number'})

    def clean_surname(self):
        if self.cleaned_data['surname'] == '123':
            raise ValidationError(self.fields['surname'].error_messages['my_error'])
        return self.cleaned_data['surname']

【讨论】:

  • clean_surname 函数永远不会被调用。它仍然无法正常工作
  • 其实你的回答是对的。但是你转身。有一种简单的方法可以做到这一点。如果可以,请展示您的观点。
【解决方案2】:

我终于用了这个,它成功了

attrs_dict = {'class': 'required'}

class MemberEditForm(forms.ModelForm):

class Meta:
    model = Member

surname = forms.RegexField(#regex=r'^[\w.@+-]+$',
    regex=r'^$',# my validation here
    max_length=50,
    widget=forms.TextInput(attrs=attrs_dict),
    label=_("Surname*"),
    error_messages={'invalid': _("Invalid Entry.")})

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2012-02-02
    相关资源
    最近更新 更多