django中的自定义清理表单数据

时间:2012-07-05 19:36:29

标签: django forms validation

我知道如何在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清理我的字段。当我将值保留为空并且看到“此值不能为空”时,它适用于该部分

我希望表单显示错误“请输入有效的电话号码”。当我输入字母而不是数字时,而不是标准的“输入整数”。

事实上,我意识到当我输入字母表时,这种方法甚至都没有运行。

我知道我可以通过创建自定义字段而不使用ModelForm来“破解”,但我真的不想这样做。

我也尝试过self.data而不是self.cleaned_data,但它没有用。

我有什么想法可以让它发挥作用。

谢谢!

1 个答案:

答案 0 :(得分: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