【发布时间】:2014-05-12 14:31:24
【问题描述】:
不明白如何将从form.data 获得的数据作为choices 传递到表单字段。非常感谢任何帮助。
所以,这就是我正在做的事情:我使用页面上的复选框选择数据,然后我需要在同一页面上显示所选数据(它们的名称),每个页面附近都有额外的文本字段。稍后必须填写所有文本字段,并且必须将“名称”和插入的数据发送到服务器。
据我了解,我需要使用表单在文本字段中呈现数据。我想可能是这个:
forms.py
import methods
class MultiTextField(SelectMultipleField):
widget = widgets.TableWidget()
option_widget = widgets.TextInput()
class SelectedForm(Form):
choices = methods.selected()
value = MultiTextField('value',choices = choices)
views.py
from forms import ...
selected_data = {}
def return_selected():
return selected_data
methods.py
from views import return_selected
def selected():
data = return_selected()
choices = []
for key, value in data.iteritems():
for item in value:
choices.append((item, key))
return choices
变量selected_data 存储通过其他形式选择的数据。
如果我运行此代码,我会收到错误 ImportError: cannot import name return_selected。可能是因为我在方法中导入视图,在表单中导入方法,在视图中导入表单o.O
我没有其他方法可以制作我需要的东西,但它不能按原样工作。
嗯,我找到了如何传递选择。
forms.py
class MultiTextField(SelectMultipleField):
widget = widgets.TableWidget()
option_widget = widgets.TextInput()
class SelectedForm(Form):
name = MultiTextField()
views.py
@app.route('/home', methods=['GET', 'POST'])
def show_work():
selected = SelectedForm(request.form)
choices = []
for key, value in selected_data.iteritems():
choices.append((key, value))
selected.name.choices = choices
return render_template('home.html', selected=selected)
可以使用selected.name.choices = choices 在视图中添加表单选择。
但是这个表格以奇怪的方式放置数据:
home.html
<form name="selected" action="{{url_for('selected_work', url='result') }}" method="post">
<p> {{selected.name}}</p>
<input type="submit" value="Calculate">
</form>
在选择中可以说:[(1,"Apple"), (2,"Apple")] 但 html 显示标签“Apple”并在其附近插入数字 1 的文本字段并再次使用数字 2 标记“Apple”插入到文本字段中。
当我提交表单时,它会在文本字段中发送插入的数据,即 ['1', '2']。但不知何故我需要获得:[(Apple,1和插入文本字段中的值),(Apple,2,插入值)]。
【问题讨论】: