我有一个网络报告,它使用 Django 表单(新表单)来控制用于生成报告的查询(开始日期、结束日期......)。我遇到的问题是页面应该使用表单的初始值(未绑定)工作,但我无法访问 clean_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'])
is_valid() 如果这是一个 GET 将失败(因为它是未绑定的),如果我这样做:
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'])
也就是说,没有用于在绑定表单和未绑定表单之间检索表单值的通用接口。
有没有人看到更清洁的方法来做到这一点?