2

django の forms.py のデータを消去する方法は知っていますが、これまでに遭遇したことのない奇妙なエラーが発生しています。

私はこれが私のforms.pyです:

class BetaPhoneForm(ModelForm):
class Meta:
    model = RegisterHotTable
    fields = ('pracPhone',)

def clean_pracPhone(self):
    pracPhone = self.cleaned_data['pracPhone']

    if pracPhone is None:
        raise forms.ValidationError("This value cannot be empty")
    else:
        if not pracPhone.isdigit():
            raise forms.ValidationError("Please enter a valid phone number.")
    return pracPhone

そこで、カスタム クリーン メソッド clean_pracPhone を使用してフィールドをクリーニングしています。値を空白のままにして「この値を空にすることはできません」と表示されると、その部分で機能します

フォームに「有効な電話番号を入力してください」というエラーを表示したい。数字の代わりにアルファベットを入力するときの標準の「整数を入力してください」の代わりに。

実際、アルファベットを入力してもこのメソッドは実行されないことに気付きました。

カスタムcharfieldを作成し、ModelFormを使用しないことで、これを「ハック」できることはわかっていますが、実際にはそうしたくありません。

self.cleaned_data の代わりに self.data も試しましたが、うまくいきませんでした。

これを機能させる方法についてのアイデア。

ありがとう!

4

1 に答える 1

4

あなたのエラーメッセージに基づいて、私はあなたのモデルででpracPhone表されているmodels.IntegerFieldと思います。これは、ModelFormでは、フィールドがで表されることを意味しますforms.IntegerField

forms.IntegerFieldデフォルトでいくつかの検証が付属しています:

  • 必要
  • 無効
  • min_value
  • max_value

代わりに、検証用のデフォルトメッセージを上書きする必要がありますIntegerField

class BetaPhoneForm(forms.ModelForm):

    pracPhone = forms.IntegerField(error_messages={
        "required": "This value cannot be empty.",
        "invalid": "Please enter a valid phone number.",
    })

    class Meta:
        model = RegisterHotTable
        fields = ('pracPhone',)

    def clean_procPhone(self):
        pracPhone = self.cleaned_data['pracPhone']
        # your other validations go here.
        return pracPhone
于 2012-07-06T01:16:30.487 に答える