我有一个Web报告,它使用Django表单(新表单)来控制用于生成报告的查询的字段(开始日期,结束日期......).我遇到的问题是页面应该使用表单的初始值(未绑定),但我无法访问cleaning_data字段,除非我调用is_valid().但is_valid()总是在未绑定的表单上失败.
似乎Django的表单设计了编辑数据的用例,这样未绑定的表单对于除显示HTML之外的任何其他内容都没有用.
例如,如果我有:
if request.method == 'GET': form = MyForm() else: form = MyForm(request.method.POST) if form.is_valid(): do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
如果这是一个GET(因为它是未绑定的),is_valid()将失败,如果我这样做:
if request.method == 'GET': form = MyForm() do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date']) else: form = MyForm(request.method.POST) if form.is_valid(): do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
第一次调用do_query会触发form.cleaned_data上的异常,这不是有效字段,因为尚未调用is_valid().好像我必须做以下事情:
if request.method == 'GET': form = MyForm() do_query(form['start_date'].field.initial, form['end_date'].field.initial) else: form = MyForm(request.method.POST) if form.is_valid(): do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
也就是说,没有一个通用的接口来检索绑定表单和未绑定表单之间的表单值.
有没有人看到更清洁的方式来做到这一点?