Django GET或POST数据将不绑定到窗体
无论我做什么,我的表单数据都不会绑定。正如您在我的代码中看到的,我已经设置了动态的“mutlipleChoice”字段(也称为下拉菜单)。我不想解释原因,但必须动态生成。我的(截断的)表单。表单是(所有菜单选项定义的截断b/c): 我的观点如下(我还截断了代码,试图让事情更加集中): 最后,我的模板:Django GET或POST数据将不绑定到窗体,django,django-forms,Django,Django Forms,无论我做什么,我的表单数据都不会绑定。正如您在我的代码中看到的,我已经设置了动态的“mutlipleChoice”字段(也称为下拉菜单)。我不想解释原因,但必须动态生成。我的(截断的)表单。表单是(所有菜单选项定义的截断b/c): 我的观点如下(我还截断了代码,试图让事情更加集中): 最后,我的模板: <html> <h3>(an '*' indicates a required column assignment)</h3> {% if form.e
<html>
<h3>(an '*' indicates a required column assignment)</h3>
{% if form.errors %}
<p style="color: red;">
Please correct the following: {{ form.errors }} below
</p>
{% endif %}
<form action="" method="GET">
{{form.as_ul}}
<input type="submit" value="Submit Valuations">
</form>
</html>
很抱歉,这太长了,但我已经花了十几个小时修改代码,字典总是空的。唯一通过的是我隐藏的“column_标签”输入。它必须与我的动态生成的字段有关。但是什么呢
PS——请原谅/忽略代码中的一些初始缩进错误。这是我的第一篇文章,我很难让代码块的第一行正确缩进(我猜它实际上是不缩进的)我的搭档找到了这个问题的答案 以我的形式,我有
for col_count, cell_val in enumerate(rows, empty_cols):
self.fields[col_count] = forms.ChoiceField
问题是它生成的字段名只是一个数字。根据
雅各布·卡普兰
这不仅是约定,而且是Django识别这些动态生成字段的实际方式,以便Django将POST或获取数据绑定到表单。我没有尝试其他名字,我只是坚持使用JKM,然后使用:
for col_count, cell_val in enumerate(rows, empty_cols):
self.fields['custom_%s' % col_count] = forms.ChoiceField
我太高兴了,因为它奏效了。谢谢你的建议,丹·罗斯曼 我真的不明白这段代码的大部分在做什么,但是您需要从
clean
方法返回清理过的数据。您绝对可以这样做。我适当地编辑了我的问题。我的代码中总是有“返回数据”行,只是在发布之前删除了一堆重复的错误检查代码,然后错误地将其编辑掉了。试图让问题更容易理解。为这段代码添加上下文:它允许用户上传数据的电子表格。一旦用户这样做,程序将返回电子表格中的第一行数据,并将此行中的每一列显示为“BatchMap”表单上的字段。使用这些字段,用户从下拉菜单(ChoiceField)中选择,以指定电子表格中的哪些列表示:地址、城市、州等。好的,谢谢。这是实际的表单定义吗?我注意到有一些语法错误(例如缺少),因此您没有简单地复制和粘贴。特别是,\uuuu init\uuu
的签名正确吗?开枪!我不知道for循环中的for发生了什么。我一定是在试图纠正缩进时把它擦掉了。事实上,这在我的代码中。这是实际的表单定义,但有以下例外:Where is says!!截断。。。!!我删除了几行常量定义、元组选择和不相关的验证逻辑,我仔细检查了init签名和super调用。两者都是逐字逐句的。为这一混乱道歉。
elif 'column_labels' in request.GET:
row_header = request.session['header']
empty_cols = request.session['start_cols']
form = BatchMap(request.GET, rows=row_header, empty_cols=empty_cols)
---> if form[0]=='due_date':
return HttpResponse('SUCCESS!')
for col_count, cell_val in enumerate(rows, empty_cols):
self.fields[col_count] = forms.ChoiceField
for col_count, cell_val in enumerate(rows, empty_cols):
self.fields['custom_%s' % col_count] = forms.ChoiceField