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)

フォーム.py

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

入力なしでフォームを保存しようとすると、デフォルトの「このフィールドは必須です」というエラーが表示されるので、ビューが正しいことがわかります。問題は、姓フィールドの検証がまったく機能せず、理解できないことです。ここで何が間違っていますか。なぜうまくいかないのですか?これはイライラします

4

2 に答える 2

0

私はついにこれを使用しましたが、うまくいきました

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.")})

ありがとう

于 2013-01-24T12:28:25.493 に答える
0

実際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']
于 2013-01-22T10:03:54.803 に答える