如何为ModelFormMixin重写clean与clean_fieldname方法?
Django 通用视图表单处理重写入口说明
form_valid 不是重写表单处理流程的唯一入口,ProcessFormView 搭配 ModelFormMixin 的表单处理全流程有多个可重写的节点,按执行顺序分别如下:
- 表单实例化阶段:可重写
get_form()方法,调整表单初始化参数、修改表单字段属性、替换使用的表单类都可以在这个方法中实现。 - 表单校验阶段:
- Form类本身的校验逻辑和通用视图解耦,不管是否使用上述Mixin,
clean_字段名()方法都会先于全局clean()方法按顺序执行,你感知到的逻辑差异通常是视图层实例化表单时的参数传递异常导致,可优先排查是否有手动跳过is_valid()调用的逻辑。 - 可重写
form_invalid()方法自定义校验失败后的处理逻辑,不需要耦合在表单类或者成功处理逻辑中。
- Form类本身的校验逻辑和通用视图解耦,不管是否使用上述Mixin,
- 校验成功阶段:
form_valid()是这个阶段的默认入口,默认内置逻辑为保存表单实例、跳转至成功地址,你可以在这里扩展校验成功后的额外业务逻辑。 - 跳转地址配置阶段:可单独重写
get_success_url()方法动态生成校验通过后的跳转地址,无需将跳转逻辑耦合在form_valid中。
内容的提问来源于stack exchange,提问作者sebhaase
相关产品推荐
相关产品推荐

