Py学习  »  Django

遍历字段时访问django表单的初始值

Chad • 5 年前 • 992 次点击  

我正在尝试做一些非常简单的事情;当我传递了这样的初始值时,我想对django模板内的表单字段应用“隐藏”样式:

form = form_class(initial={'field':data})

通常情况下如下:

<li class="{{form.somefield.name}} {% if form.somefield.initial %} hidden{% endif %}>
    ...
</li>

但是我正在迭代表单,所以我想做的是如下所示:

{% for field in form %}
    <li class="{{field.name}} {% if field.initial %} hidden{% endif %}">
    ...
    </li>
{% endfor %}

但这不起作用,因为field.initial只有表单中字段的初始值,而不是表单创建时传入的数据。除了将迭代分解为单独的表单之外,还有一个很好的解决方案吗?

我想到的一些(坏的)解决方案:

  • 压倒一切 初始化 将值从self.initial填充为self.fields;
  • 编写名为%hideifhasInitial%的模板标记
  • 向表单中添加一个使用zip on self和self.initial的方法(不起作用,因为self.initial只有一个元素,self只有4个元素,它只迭代了1个元素,键(字段名)不匹配)。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31142
 
992 次点击  
文章 [ 4 ]  |  最新文章 5 年前
dqd
Reply   •   1 楼
dqd    13 年前

具有初始键的解决方案对我不起作用,因为该字段作为值包含空字符串。我必须写自己的自定义标签:

from django import template
register = template.Library()

@register.simple_tag
def field_empty(field):
    if not field.form.initial.get(field.name):
        return ' hidden'

    return ''

在您的示例中,我将按如下方式使用标记:

<li class="{{ field.name }} {% field_empty field %}">
Chad
Reply   •   2 楼
Chad    13 年前

结果发现有一种方法更容易做到这一点。

{% if field.name in form.initial.keys %}
sergiuz
Reply   •   3 楼
sergiuz    7 年前

可以在上访问初始数据 value 属性,初始数据表示 价值 领域:

{{field.value}}

Derek
Reply   •   4 楼
Derek    13 年前

这个怎么样?

{% for field in form %}
    {% if field.name in field.form.initial.keys %}
        ...
    {% endif %}
{% endfor %}