首页 > 解决方案 > 将选择输入的值设置为 Django 表单模板中最后一个请求的值

问题描述

这是我的模板代码

<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

有谁知道发生了什么?

标签: djangodjango-formsdjango-templates

解决方案


但是对以下条件 {% if form.assigned_employee.value == id %} selected{% 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 转换为 string,你可以使用:

{% 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 %}

推荐阅读