我是python和flask框架的新手。
我的问题是我必须制作一个编辑页面。因此,我需要将所有对象的现有信息传递到一个表单中。详细信息:
我的对象有这样的结构:
class TVChannel(Document):
__collection__ = 'tvchannels'
use_dot_notation = True
structure = {
'_id' : basestring,
'name' : unicode,
'streams' : {
'city1': {
'adapt' : basestring,
'hds' : basestring,
'hls' : basestring,
'rtmp' : basestring,
},
'city2': {
'adapt' : basestring,
'hds' : basestring,
'hls' : basestring,
'rtmp' : basestring,
}
}
}在视图中:
channel_obj = db.TVChannel().get_id(channel_id) #load a channel's datas into an object from db
channel = ChannelForm(request.form, obj=channel_obj) #load channel form
return render_template('channel/new.html',form=channel, channel_id=channel_id)channel_object的“名称”,它们可以理解并像正常一样传递。但是"streams",他们没有识别并传递给像这样的东西:
class ChannelForm(Form):
_id = HiddenField()
name = TextField(_('channel name'))
streams = {
'city1': {
'adapt' : TextField(_('stream adapt link')),
'hds' : TextField(_('stream hds link')),
'hls' : TextField(_('stream hls link')),
'rtmp' : TextField(_('stream rtmp link')),
},
'city2': {
'adapt' : TextField(_('stream adapt link')),
'hds' : TextField(_('stream hds link')),
'hls' : TextField(_('stream hls link')),
'rtmp' : TextField(_('stream rtmp link')),
}
}
submit = SubmitField(_('Save'))我该怎么办?或者有没有办法修改对象的数据如何传递到表单的这些参数中?
发布于 2012-10-08 12:37:17
我在文档中找到了这一点,现在我将使用它:
在视图中:
channel_obj = db.TVChannel().get_id(channel_id) #load a channel's infos into an object
channel = ChannelForm(request.form, obj=channel_obj) #load channel form
channel.CITY1adapt.process_data(channel_obj.streams['City1']['adapt'])
#and others links在表单中:
class ChannelForm(Form):
_id = HiddenField()
name = TextField(_('channel name'))
CITY1adapt = TextField(_('adapt link'))
CITY2adapt = TextField(_('adapt link'))
#and so on
submit = SubmitField(_('Save'))现在,当我“保存”它们的时候,我正在工作。
发布于 2012-10-07 09:05:17
您可以通过wtforms.fields.FormField使用嵌套表单。在您的例子中,应该是这样的:
class CitiForm(Form):
adapt = TextField(_('stream adapt link'))
hds = TextField(_('stream hds link'))
hls = TextField(_('stream hls link'))
rtmp = TextField(_('stream rtmp link'))
class ChannelForm(Form):
_id = HiddenField()
name = TextField(_('channel name'))
city1 = FormField(CitiForm)
city2 = FormField(CitiForm)https://stackoverflow.com/questions/12744136
复制相似问题