【问题标题】:Send the value of a disabled select in a form with a hidden input在具有隐藏输入的表单中发送禁用选择的值
【发布时间】:2021-10-15 11:11:23
【问题描述】:

我有一个 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 %}

【问题讨论】:

  • 请看如何写minimal reproducible example。您如何设置这些隐藏输入的值?服务器如何获取/读取这些值(request.POST/由表单类自动完成等)?仅仅模板显然不足以重现您的问题...
  • @AbdulAzizBarkat 因此工作流程如下:用户单击一个按钮,该按钮调用views.py 中的一个视图,该视图生成表单的值并在响应中呈现该值。在值被渲染后,比如说“a.html”,用户点击另一个按钮,该按钮也调用views.py中的一个视图,该视图需要按顺序获取在“a.html”处呈现的表单的先前值在呈现的响应“b.html”中显示相同的表单值。我想这就是你需要知道的全部。

标签: html django django-templates


【解决方案1】:

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

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

【讨论】:

  • 但这适用于所有选择,对吧?我只想禁用 3 个特定选择:ba1、bs2 和 pm2。
  • 否,要禁用的字段,请明确指定。 self.fields['field1'].disabled = True 同样 self.fields['field2'].disabled = True
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2017-07-11
相关资源
最近更新 更多