这应该很简单,但我没有从 Django 文档中弄清楚。我有一个 IntegerField 模型字段,我从中创建了一个 ModelForm 字段。有问题的字段包含 $ 值(价格),如果用户在输入 $10 而不是 10 时没有收到错误消息(“输入整数”),则从用户体验的角度来看,这将是更可取的。
我尝试过手动清理表单,但似乎 clean_field 方法是在其他验证方法之后运行的。到目前为止,我的阅读似乎也证实了这一点。
def clean_bill(self):
bill = self.cleaned_data["bill"]
if '$' in bill:
bill=bill.replace('$','',1)
return bill
在保持模型表单中的 IntegerField 的同时有没有办法解决这个问题?我应该把它变成一个 RegexField 吗?
编辑:我最终选择了上述内容和 RegexField 的组合。仍然好奇是否有另一种/更好的方法。
bill= forms.RegexField(label=_("Bill"), max_length=10,required=True, regex=r'^\$?[\d]+$',
error_messages = {'invalid': _("Please enter a whole number.")})