Django GET或POST数据将不绑定到窗体

Django GET或POST数据将不绑定到窗体,django,django-forms,Django,Django Forms,无论我做什么,我的表单数据都不会绑定。正如您在我的代码中看到的,我已经设置了动态的“mutlipleChoice”字段(也称为下拉菜单)。我不想解释原因,但必须动态生成。我的(截断的)表单。表单是(所有菜单选项定义的截断b/c): 我的观点如下(我还截断了代码,试图让事情更加集中): 最后,我的模板: <html> <h3>(an '*' indicates a required column assignment)</h3> {% if form.e

无论我做什么,我的表单数据都不会绑定。正如您在我的代码中看到的,我已经设置了动态的“mutlipleChoice”字段(也称为下拉菜单)。我不想解释原因,但必须动态生成。我的(截断的)表单。表单是(所有菜单选项定义的截断b/c):

我的观点如下(我还截断了代码,试图让事情更加集中):

最后,我的模板:

    <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