迭代字段时访问 django 表单的初始值

Cha*_*had 2 django django-forms

我正在尝试做一些非常简单的事情;当我传入一些初始值时,我想将“隐藏”样式应用于 django 模板内的表单字段,如下所示:

form = form_class(initial={'field':data})
Run Code Online (Sandbox Code Playgroud)

通常情况下,它会是这样的:

<li class="{{form.somefield.name}} {% if form.somefield.initial %} hidden{% endif %}>
    ...
</li>
Run Code Online (Sandbox Code Playgroud)

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

{% for field in form %}
    <li class="{{field.name}} {% if field.initial %} hidden{% endif %}">
    ...
    </li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 重写init将 self.initial 中的值填充到 self.fields 中;
  • 编写一个名为 {% hideifhasinitial %} 的模板标签
  • 在 self 和 self.initial 上使用 zip 的表单中添加一种方法(不起作用,因为 self.initial 只有一个元素,而 self 有 4 个元素,它只迭代 1 个元素,并且键(字段名称)没有) t 匹配)。

小智 5

这个怎么样?

{% for field in form %}
    {% if field.name in field.form.initial.keys %}
        ...
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)