【问题标题】:Django ModelForm: accessing a field's value in the view templateDjango ModelForm:访问视图模板中的字段值
【发布时间】:2010-12-11 08:29:32
【问题描述】:

问:是否可以在模板中提取我的 ModelForm 字段之一的值?如果有,怎么做?

背景: 我有一个搜索表单,我使用它来允许用户过滤查询结果。并且,可以将结果表和表格一起导出到 Excel 工作表中。当页面呈现新结果时,搜索表单的输入值仍然保留。但是,它们仍然包含在表单的每个输入字段的字段对象中。因此,在导出到 Excel 期间,不会抓取搜索表单的值,因为 不在它自己的表格单元格中。所以,我想在包含字段值的字段列之后添加一列(但不显示此列)。

可以解析该字段的 HTML 字符串并获取 value 属性中的任何内容,但我只会将其作为最后的手段。到目前为止,我已经能够访问表单的数据字典并获取我想要的任何字段的对象,但我还没有弄清楚我可以使用哪种方法来实际获取字段的值。

【问题讨论】:

    标签: django django-templates django-forms


    【解决方案1】:

    尝试以下操作:{{ form.a.value }}

    【讨论】:

      【解决方案2】:

      表单只有在其有效时才具有属性cleaned_data。 如果您想访问表单字段之一的值,您可以在模板中编写:

      {{ form.data.%field_name% }}

      【讨论】:

        【解决方案3】:

        由于您试图从填写的表单中获取这些数据,我认为最简单的方法是将表单 .cleaned_data 传递给模板并使用它。假设您有一个包含字段namespecialty 的表单,它看起来像这样:

        def my_view(request):
            form = my_form(request.GET)
            if form.is_valid():
                ... do search stuff ...
                search_query = form.cleaned_data
                return render_to_response('my_template.html', {'search_query': search_query, 'search_results': ...,}, ...)
        

        然后,在您的模板中,您只需提取所需的值:

        <tr>
          <th>Name</th>
          <th>Specialty</td>
        </tr>
        <tr>
          <td>{{ search_query.name }}</td>
          <td>{{ search_query.specialty }}</th>
        </tr>
        

        或者您将其格式化为 Excel。

        【讨论】:

        • 谢谢。这是我考虑过的一个选项(它比解析 HTML :P 更容易),但我希望 Django 提供一个类函数/属性来实际获取字段的值。
        • 如果查询有一个模型,你可以使用form.instance,但听起来好像是一个查询,可能没有。现在想想,如果你真的不想在视图中传递它,你总是可以在模板中访问 form.cleaned_data.foo_bar 。这可能是您正在寻找的更多内容。
        • 谢谢 tghw。我实际上最终使用了模型实例方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        • 2013-03-16
        • 2020-11-09
        • 2018-07-01
        • 1970-01-01
        • 2019-03-10
        • 2017-02-27
        相关资源
        最近更新 更多