您的位置:首页 > 编程语言 > Go语言

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 表单 分页