扩展 Django forms.Field - 支持 default 属性
django.forms 包提供了 HTML 表单验证的功能,在没有使用 DRF 的情况下,无法合理地处理 API 传参的验证,其中传参验证中就缺少了参数默认值的设置。
层次结构
django.forms 包提供的 Field 类如下:
| |
继承关系如下图:
| |
基类 Field 的构造函数的声明如下:
initial 参数
其中有一个 initial 参数,可以用来表示 Form 渲染出的 HTML 代码中的显示值,但并不会给字段赋值,如:
| |
请求该接口打印的信息如下:
可见,django 提供的 Field 类没有提供类似于默认值的功能。比如,当用户不能给出默认的 name 值时进行赋值。
自定义 default 参数
封装一个需要提供默认值功能的字段类,这里以 TypedChoiceField 为例,其中 TypedChoiceField._coerce 方法本身也提供了一定的验证功能,看源码:
| |
当传值解析为指定的 empty_value 或在 empty_values 中时,返回指定的默认值,其余不变。
| |
那么在使用 MyTypedChoiceField 时可以指定 default 参数,如:
| |
不带任何参数值请求该接口时的返回如下:
不同的 Field 子类也可进行类似的继承再修改。