0

django の組み込みバリデーターは、フィールドにスペースだけが入力された場合でも受け入れます。スペースのみが入力された場合に検証エラーを発生させる検証が必要です。次のようなフィールドがあります。

name = forms.CharField(max_length=200)  

外部でバリデーターを使用する、つまり、このような関数を作成するとうまくいきます。

def validate_spaces(value):
  if value.strip() == '':
     raise ValidationError(u"You must provide more than just whitespace.")

しかし、 form.clean() メソッドを使用して、つまり外部に余分な関数を記述せずに実行できるかどうかを考えていました。どんな助けでも大歓迎です。

4

1 に答える 1

2

次の方法で form.clean() にカスタム動作を追加できます。

class YourForm(forms.Form):
    # Everything as before.
    ...

    def clean_name(self):
        data = self.cleaned_data['name']
        if data.strip() == '':
            raise forms.ValidationError(u"You must provide more than just whitespace.")

        # Always return the cleaned data, whether you have changed it or
        # not.
        return data

ただし、このタイプの検証を自動的に取得するタイプのフィールドを作成する場合は、次のように新しいクラスを追加します

class NoSpacesCharField(forms.CharField):
    def validate(self, value):
        # Use the parent's handling of required fields, etc.
        super(NoSpacesCharField, self).validate(value)

        if value.strip() == '':
            raise ValidationError(u"You must provide more than just whitespace.")

次に、NoSpacesCharField通常は forms.CharField を使用するのと同じように使用します。

私は現在、このコードをテストする立場にないので、奇妙なねじれがあるかもしれませんが、ほとんどの場合はそこに到達するはずです. Django でのフォーム検証の詳細については、https: //docs.djangoproject.com/en/dev/ref/forms/validation/ を参照してください。

于 2012-09-05T10:03:53.240 に答える