在Django表单中动态添加隐藏输入会导致KeyError

时间:2019-06-09 18:54:50

标签: django

在我的代码中,我具有jQuery方法,通过该方法我可以在提交时动态地向表单添加值。代码如下:

form_page.html

<form id="objectForm" class="form-horizontal" action="" method="post">
{% csrf_token %}
{% include 'manage/form-template.html'%}
    <button id="submitBtn">submit</button>
</form>

<script>
  $(document).ready(function(){
    $("#submitBtn").click(function(){
        $("#objectForm").submit(function(){
          $("<input />").attr("type", "hidden")
          .attr("name", "dates")
          .attr("value", "something")
          .appendTo("#objectForm");
          return true;
         }); // Submit the form
    });
  });
</script>

views.py

class ObjectUpdateView(UpdateView):

    template_name = 'manage/object_form.html'
    form_class = ObjectEditForm
    def get_success_url(self):
        #...
    def form_valid(self, form):
        clean = form.cleaned_data['dates']
        print('Dates: ', clean)
        return super(ObjectUpdateView, self).form_valid(form)

forms.py

class ObjectEditForm(forms.ModelForm):
 class Meta:
     model = Object
     fields = ['TestField']

此代码在clean = form.cleaned_data['dates']行上导致KeyError。在Chrome中调试POST值,我可以看到该值本身已正确设置。出于某种原因,Django没有注册。

有人可以建议我需要做什么,才能在Python中访问此值?

编辑

基于评论中的讨论,我想稍微更新一下我想要的内容。

我知道ObjectEditForm只有一个字段。原因是我的Object模型中只有一个字段。我要添加的另一个字段dates将会在视图中使用。在我的html网站上,我还使用了JS日历,从中我收集了Submit方法上的日期并将那些进入此额外字段的对象。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。不是最漂亮的,但是能完成工作。实际上有两件事要做: 1.修改forms.py

class ObjectEditForm(forms.ModelForm):
 dates = forms.CharField(widget=forms.HiddenInput())
 class Meta:
     model = Object
     fields = ['TestField']
  1. 修改表单字段打印。由于我在所有字段上都有forloop,因此必须添加if条件,以不显示与dates字段相关的任何内容。

现在,一切似乎都正常了。如果有人有更清洁的想法,我将不胜感激。