0

model.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 

当我尝试保存表单没有输入的,我得到的默认'这个字段是必需的'错误,所以我知道我的观点是正确的。事情是,我的姓氏字段验证根本不起作用,我不明白。我在这里做错了什么。为什么不工作?这是令人沮丧的

+0

@Daniel罗斯曼 – flexxxit

+0

@Carl迈耶你能帮助我这里请注意不要调用clean_surname函数 – flexxxit

回答

0

其实Model Validation不适用于ModelForm。如果您想要在表单中验证surname,则必须使用其干净方法编写对表单的验证。

所以,你的形式必须是这样的:

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'] 
+0

。它仍然不能正常工作 – flexxxit

+0

我可以看到你的观点吗? – 2013-01-26 16:20:07

+0

其实你的回答是真实的。但你转过身。有一个简单的方法来做到这一点。如果可以,请展示您的观点。 – 2013-01-26 16:21:41

0

我终于用这个和它的工作

attrs_dict = {'class': 'required'} 

class MemberEditForm(forms.ModelForm): 

class Meta: 
    model = Member 

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

感谢

相关问题