これはかなり簡単なはずですが、Django のドキュメントからはわかりません。ModelForm フィールドを作成した IntegerField モデル フィールドがあります。問題のフィールドには $ 値 (価格) が含まれており、ユーザーが 10 ではなく $10 を入力したときにエラー メッセージ (「整数を入力してください」) が表示されなければ、UX の観点から望ましいでしょう。
手動でフォームのクリーニングを試みましたが、他の検証メソッドの後に clean_field メソッドが実行されているようです。これまでの私の読書もそれを確認しているようです。
def clean_bill(self):
bill = self.cleaned_data["bill"]
if '$' in bill:
bill=bill.replace('$','',1)
return bill
モデルフォームでIntegerFieldを維持しながら、これを回避する方法はありますか? RegexFieldにするだけですか?
EDIT:上記とRegexFieldの組み合わせで行きました。別の/より良い方法があるかどうか、まだ興味があります。
bill= forms.RegexField(label=_("Bill"), max_length=10,required=True, regex=r'^\$?[\d]+$',
error_messages = {'invalid': _("Please enter a whole number.")})