gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:17:39 26 4
gpt4 key购买 nike

我知道如何清理 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 但它没有用。

任何想法如何让这个工作。

谢谢!

最佳答案

根据您的错误消息,我假设 pracPhonemodels.IntegerField 表示在你的模型中。这意味着在您的 ModelForm 中,该字段由 forms.IntegerField 表示。 .
forms.IntegerField默认情况下带有一些验证:

  • 必填
  • 无效
  • 最小值
  • 最大值

  • 您应该覆盖 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

    关于django - django中的自定义清理表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351357/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com