Django Form之动态数据初始化
2016-08-06 23:05
711 查看
Form.initial != 动态数据初始化
在上一篇对BaseForm的源码分析中,我们已经可以清晰地知道Form.initial并没有对数据初始化,它只是对没有绑定的表单进行展示。接下来我将提供一个简短的代码片段及示例来描述如何动态初始化,假设有一个QueryForm,有两个参数进行查询,分别是limit和offset,通过这两个参数来控制分页,limit的默认值为10,offset默认为0。
class QueryForm(forms.Form): limit = forms.IntegerField(required=False) offset = forms.IntegerField(required=False)
我们想要达到这样的效果:
>>> f1 = QueryForm({}) >>> f1.is_valid() True >>> f1.cleaned_data {'limit': 10, 'offset': 0}
现在是对field进行默认的赋值,而不是底层的验证,因此我不会选择在field层次进行initial的赋值,我选择在form.clean_<field_name>。
def clean_limit(self): limit = self.cleaned_data.get('limit', None) if limit is None: return self.initial.get('limit', DEFAULT_LIMIT) return limit
offset同理:
def clean_offset(self): offset = self.cleaned_data.get('offset', None) if offset is None: return self.initial.get('offset', DEFAULT_OFFSET) return offset
如果我们在data中提供对limit和offset的定义,也能在cleaned_data中获取,值得注意的是,当希望使用默认值的时候,需要传入空字典进行数据绑定,否则数据是不会进行绑定的,自然无法验证。
相关文章推荐
- 【Django】Django—Form两种解决表单数据无法动态刷新的方法
- 使用Django Form解决表单数据无法动态刷新的两种方法
- Django—Form两种解决表单数据无法动态刷新的方法
- Django—Form两种解决表单数据无法动态刷新的方法
- ASP.NET FormView - 动态模版以及数据绑定到DynamicObject
- 动态组装Form提交数据并跳转
- 动态为 dijit.form.FilteringSelect 加载数据
- C/C++ 二维数据 静态动态声明和初始化及访问方法实例
- Struts2 checkboxlist 数据的保存以及动态初始化
- Extjs创建form表单以及绑定动态数据到grid
- PDF Form (2) --- 创建显示任意多行数据的动态Table
- Form表单域的动态设计-竖表方式存储数据的优势(3)
- Django数据模型动态增删字段(更改数据库模式)
- django的form,数据在html的显示
- javascript 实现动态创建Form发送数据
- iOS端向后台(Python-django)POST多块数据(multipart/form)
- 智能表单设计器Web Free Form Designer:FreeForm动态数据验证和动态自动计算
- 智能表单设计器Web Free Form Designer:FreeForm动态数据验证和动态自动计算
- wpf 中的treeviewitem:基于数据初始化控件 数据动态加载 右键选中
- django form关于clean及cleaned_data的说明 以及4种初始化