Доступ к начальному значению форм django при итерации по полям - PullRequest
2 голосов
/ 06 августа 2010

Я пытаюсь сделать что-то довольно простое; Я хотел бы применить «скрытый» стиль к полю формы внутри шаблона 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 имеет только значение, определенное как начальное для поля в форме, а не данные, которые передаются при создании формы. Есть ли хорошее решение для этого, кроме простого разбиения итерации на отдельные формы?

Некоторые (плохие) решения, о которых я подумал:

  • переопределение init для заполнения значений из self.initial в self.fields;
  • написание шаблона тегов с именем {% hideifhasinitial%}
  • добавление в форму метода, который использует zip для self и self.initial (не работает, поскольку self.initial имеет только один элемент, а self имеет 4, он повторяется только для 1 элемента и ключей (имен полей ) не совпадает).

Ответы [ 4 ]

4 голосов
/ 07 августа 2010

как насчет этого?

{% for field in form %}
    {% if field.name in field.form.initial.keys %}
        ...
    {% endif %}
{% endfor %}
2 голосов
/ 11 марта 2017

Начальные данные доступны в атрибуте value, начальные данные представляют значение поля:

{{field.value}}

0 голосов
/ 03 февраля 2011

Решение с начальными ключами у меня не сработало, потому что поле содержит значение пустой строки Мне пришлось написать свой собственный тег:

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 %}">
0 голосов
/ 06 августа 2010

Оказывается, есть способ проще сделать это.

{% if field.name in form.initial.keys %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...