在我的代码中,我具有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方法上的日期并将那些进入此额外字段的对象。
答案 0 :(得分:0)
我找到了解决方案。不是最漂亮的,但是能完成工作。实际上有两件事要做: 1.修改forms.py
class ObjectEditForm(forms.ModelForm):
dates = forms.CharField(widget=forms.HiddenInput())
class Meta:
model = Object
fields = ['TestField']
forloop
,因此必须添加if条件,以不显示与dates
字段相关的任何内容。现在,一切似乎都正常了。如果有人有更清洁的想法,我将不胜感激。