如何使用未绑定表单中的表单值

前端之家收集整理的这篇文章主要介绍了如何使用未绑定表单中的表单值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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'])

也就是说,没有用于在绑定表单和未绑定表单之间检索表单值的通用接口.

有没有人看到更清洁的方式来做到这一点?

解决方法

如果将此方法添加到表单类:
def get_cleaned_or_initial(self,fieldname):
        if hasattr(self,'cleaned_data'):
            return self.cleaned_data.get(fieldname)
        else:
            return self[fieldname].field.initial

然后你可以重新编写你的代码

if request.method == 'GET':
    form = MyForm()
else:
    form = MyForm(request.method.POST)
    form.is_valid()

do_query(form.get_cleaned_or_initial('start_date'),form.get_cleaned_or_initial('end_date'))

猜你在找的HTML相关文章