首页 > 解决方案 > 在具有隐藏输入的表单中发送禁用选择的值

问题描述

我有一个 Django 表单,其中一个部分是这样填充的:

  <select
     {% if 'ba1' in widget.name or 'bs1' in widget.name or 'pm2' in widget.name %}
     disabled
     {% endif %}
     id="{{ widget.attrs.id }}"
     name="{{ widget.name }}"
     {% if widget.attrs.disabled %}disabled{% endif %}
     {% if widget.required %}required{% endif %}
     class="form-control form-control-sm
        {% if widget.errors %} is-invalid{% else %} is-valid{% endif %}"
     aria-describedby="{{ widget.id }}-help">
     {% for value, label in widget.attrs.choices %}
        {% if value in widget.value %}
           <option value="{{ value }}" selected>{{ label }}</option>
        {% else %}
           <option value="{{ value }}" data="{{widget.value}}">{{ label }}</option>
        {% endif %}
     {% endfor %}
  </select>

由于它是 ba1、bs1 和 pm2 情况下的禁用字段,因此该信息不会在 POST 请求中发送。

所以我所做的是,通过一个隐藏的输入,发送禁用选择的选定值。

不幸的是,该值始终为 0 而不是正确的值。我做错了什么。有人可以帮助我吗?

比如选择的值是2,或者3或者4,没关系,隐藏的输入说选择的值是0,是不正确的。

隐藏的输入代码(不工作,总是值 = 0)

  {% if 'ba1' in widget.name or 'bs1' in widget.name or 'pm2' in widget.name %}
  <input
     type="hidden"
     name="{{ widget.name }}"
     class="form-control form-control-sm
        {% if widget.errors %} is-invalid{% else %} is-valid{% endif %}"
     {% for value, label in widget.attrs.choices %}
        {% if value in widget.value %}
           value="{{ value }}"
        {% else %}
           value="{{ value }}" data="{{widget.value}}"
        {% endif %}
     {% endfor %}
  >
  {% endif %}

标签: htmldjangodjango-templates

解决方案


您可以尝试在 forms.py 中该 Form 类的 init 方法中将字段设置为禁用。

     def __init__(self, *args, **kwargs):
        super(YourForm, self).__init__(*args, **kwargs)
        self.fields['Yourfield'].disabled = True

推荐阅读