首页 文章

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

提问于
浏览
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清理我的字段 . 当我将值保留为空并且看到“此值不能为空”时,它适用于该部件

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

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

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

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

任何想法我怎么能让这个工作 .

谢谢!

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
    

相关问题