Javascript 不在 django 的表单集隐藏输入字段上插入值

Javascript does not insert value on django's formset hidden input field

我试图在表单集中的隐藏输入字段上传递一个值。但是,当我点击提交时,我什么也没得到:'form-0-my-field': ['']。谁能帮我解决这个问题?

这是我的表格:

class MyForm(forms.Form):
    my_field = forms.CharField(widget=forms.HiddenInput(attrs={
        'class': 'my_field'}))

表单集:

MyFormSet = formset_factory(MyForm, max_num=5)

views.py

def my_view(request):
    if request.method == 'POST':
        formset = MyFormSet(request.POST)
        if formset.is_valid():
            print(formset.cleaned_data)
    else:
        formset = MyFormSet()

    return render(request, 'my_template.html', ctx={'formset': formset})

最后是我的模板,脚本最终指向 my_field:

{% for form in formset.forms %}
        {% for field in form.visible_fields %}
            {# Include the hidden fields in the form #}
            {% if forloop.first %}
              {% for hidden in form.hidden_fields %}
                {{ hidden }}
              {% endfor %}
            {% endif %}
            {{ field.errors.as_ul }}
            {{ field }}
          </td>
        {% endfor %}
    <button type="submit">Submit</button>

<script>
document.getElementsByClassName("my_field").value = "some str";
alert(document.getElementsByClassName("my_field").value);
</script>

类可以匹配多个元素。所以 document.getElementsByClassName returns 一个 HTMLCollection,即对象数组(注意方法名称中的 s)。

要分配一个值,您需要引用集合中的项目:

document.getElementsByClassName("my_field")[0].value = "some str";

不过,您最好通过 ID 而不是 类。