Django 表单form.is_valid() 和form.cleaned_data不会重复验证吗?

在学习ModelForm时遇到一个问题:
form.py中定义了clean_payment函数,用来对payment字段进行清洗。
views.py中验证表单v.is_valid()时就已自动执行上面的清洗函数,那后面再执行v.cleaned_data,岂不是重复清洗?

# form.py
#!!!!!!!!!!  注意这里是ModelForm    !!!!!!!!!!
class VocationForm(forms.ModelForm):
    class Meta:
        ...
    # 自定义表单字段payment的数据清洗
    def clean_payment(self):
        data = self.cleaned_data['payment'] + 10
        return data

# views.py
def index(request):
    if request.method == 'GET':
       ...
    else:
        v = VocationForm(data=request.POST, prefix='vv')
        # is_valid()会使字段payment自增加10
        if v.is_valid():
           ...
            if not result:
               ...
            else:
                d = v.cleaned_data   # 这里不会再对字段payment自增加10吗?
                d['title'] = '中级' + d['title']
                result.update(**d)
                return HttpResponse('修改成功')
        else:
           ...

查询资料:Django 文档-表单与字段验证
What is the use of cleaned_data in Django
可知是我理解错了。在form.py中自定义的验证和清洗函数,或者默认的继承的清洗函数,都会在调用form.is_valid()方法时自动执行,而不是在调用form.cleaned_data时执行,form.cleaned_data只是一个存储去除了多余标签的数据的字典。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值