如何创建一个Django表单列表——使用不同的HTML名称,以便我们可以轻松地检索它们



在一个表中,每一行都包含一个ID号和一个下拉列表。我希望用户在每一行的下拉列表中选择一个值,然后提交所有这些值并在下一页上显示。在下一页中,我调用request.POST.get(),因此每个下拉列表都需要有一个唯一的HTML名称。

目前,我有以下工作来显示信息:

class Dropdown(forms.Form):
def __init__(self, mylistTuples):
super(Dropdown,self).__init__()
self.fields['dropdown'] = forms.CharField(label="", widget=forms.Select(choices=mylistTuples))
dropdown = forms.CharField()

它的HTML输出是:

<tbody >
<tr class="even">
<td >item1</td>
<td ><p> <select name="dropdown" id="id_dropdown">
<option value="option1">option1</option>
<option value="option2">option2</option>
</select></p></td>
</tr>
<tr class="odd">
<td >item2</td>
<td ><p> <select name="dropdown" id="id_dropdown">
<option value="option1">option1</option>
<option value="option2">option2</option>
</select></p></td>
</tr>
</tbody>

这不允许我检索不同的dropdowns。request.POST.get("dropdown")只检索最后一个!

我想我想要以下内容,但我不太明白self.fields['name']与变量name之间的关系。

class Dropdown(forms.Form):
def __init__(self, mylistTuples, my_id):
super(Dropdown,self).__init__()
self.fields['dropdown_'+my_id] = forms.CharField(label="", widget=forms.Select(choices=mylistTuples))
dropdown?? = forms.CharField()

我还尝试了以下操作,但没有成功(显然self不是在__init__函数之外定义的(:

class Dropdown(forms.Form):
def __init__(self, mylistTuples, my_id):
super(Dropdown,self).__init__()
self.fields['dropdown_'+my_id] = forms.CharField(label="", widget=forms.Select(choices=mylistTuples))
self.my_id = my_id
globals()['dropdown_'+self.my_id] = forms.CharField()

在下一页的视图中,request.POST.items()将允许我循环查看结果。

找到了一种让它工作的方法,但我不知道这是否是最优雅的方法
在我的表单定义中,我将下拉列表的名称存储在全局变量(dd_id(中:

class Dropdown(forms.Form):
def __init__(self, mylistTuples, my_id):
super(Dropdown,self).__init__()
global dd_id
dd_id = 'dropdown_' + my_id
self.fields[dd_id] = forms.CharField(label="", widget=forms.Select(choices=mylistTuples))
globals()['dd_id'] = forms.CharField()

这创建了我想要的HTML输出,其中包含个性化的nameid字段。

最新更新