将选择输入的值设置为Django表单模板中的最后一个请求的值

时间:2019-11-29 09:08:06

标签: django django-forms django-templates

这是我的模板代码

<div class="form-group row">
    <label for="{{ form.diagnosis.id_for_label }}" class="col-sm-4 col-form-label col-form-label-sm">{{ form.diagnosis.label }}</label>
    <div class="col-sm-8">
        <input type="text" class="form-control form-control-sm{% if form.diagnosis.errors %} is-invalid{% endif %}" id="{{ form.diagnosis.id_for_label }}" name="{{ form.diagnosis.html_name }}" value="{{ form.diagnosis.value }}" required>
        {% if form.diagnosis.errors %}
        <div class="invalid-feedback">
            {% for error in form.diagnosis.errors %}
                {{ error }}
            {% endfor %}
        </div>
        {% elif form.diagnosis.help_text %}
        <small class="form-text text-muted">
            {{ form.diagnosis.help_text }}
        </small>
        {% endif %}
    </div>
</div>
<div class="form-group row">
    <label for="{{ form.assigned_employee.id_for_label }}" class="col-sm-4 col-form-label col-form-label-sm">{{ form.assigned_employee.label }}</label>
    <div class="col-sm-8">
        <select class="custom-select custom-select-sm{% if form.assigned_employee.errors %} is-invalid{% endif %}" id="{{ form.assigned_employee.id_for_label }}" name="{{ form.assigned_employee.html_name }}">
            {% for id, name in form.fields.assigned_employee.choices %}
                <option value="{{ id }}"{% if form.assigned_employee.value == id %} selected{% endif %}>{{ name }}</option>
            {% endfor %}
        </select>
        {% if form.assigned_employee.errors %}
        <div class="invalid-feedback">
            {% for error in form.assigned_employee.errors %}
                {{ error }}
            {% endfor %}
        </div>
        {% elif form.assigned_employee.help_text %}
        <small class="form-text text-muted">
            {{ form.assigned_employee.help_text }}
        </small>
        {% endif %}
    </div>
</div>

如您所见,我已经手动创建了表单模板,并希望保持这种状态。

我可以使用{{ form.field.value }}设置先前提交的字段的值。但是我不能对<select>字段做同样的事情。

我已经尝试使用以下方法

{% for id, name in form.fields.assigned_employee.choices %}
    <option value="{{ id }}"{% if form.assigned_employee.value == id %} selected{% endif %}>{{ name }}</option>
{% endfor %}

。但是,除了我为form = SomeForm(initial={'assigned_employee': 20180011})

之类的字段设置初始值时,它不起作用

有趣的是form.assigned_employee.value在提交后返回一个值。我已经使用console.log({{ form.assigned_employee.value }})进行了检查。

但是对以下条件{% if form.assigned_employee.value == id %} selected{% endif %}的评估始终为false

有人知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

  

但是对以下条件{%如果选择了form.assigned_employee.value == id%}的评估{%endif%}总是错误的。

那是因为您忘记放置字段;您应该使用{% if form.fields.assigned_employee.value == id %}而不是{% if form.assigned_employee.value == id %}

{% for id, name in form.fields.assigned_employee.choices %}
    <option value="{{ id }}"{% if form.fields.assigned_employee.value == id %} selected{% endif %}>{{ name }}</option>
{% endfor %}

编辑

@Daniel Roseman的注释中所述,如果要在模板中将int转换为字符串,可以使用:

{% for id, name in form.fields.assigned_employee.choices %}
    <option value="{{ id }}"{% if form.assigned_employee.value == id|stringformat:"i" %} selected{% endif %}>{{ name }}</option>
{% endfor %}