在一个表中,每一行都包含一个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>
这不允许我检索不同的dropdown
s。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输出,其中包含个性化的name
和id
字段。