首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-WTF:如何将结构化对象传递给form

Flask-WTF:如何将结构化对象传递给form
EN

Stack Overflow用户
提问于 2012-10-05 18:17:50
回答 2查看 2.4K关注 0票数 4

我是python和flask框架的新手。

我的问题是我必须制作一个编辑页面。因此,我需要将所有对象的现有信息传递到一个表单中。详细信息:

我的对象有这样的结构:

代码语言:javascript
复制
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,
            }
        }
    }

在视图中:

代码语言:javascript
复制
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",他们没有识别并传递给像这样的东西:

代码语言:javascript
复制
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'))

我该怎么办?或者有没有办法修改对象的数据如何传递到表单的这些参数中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-08 12:37:17

我在文档中找到了这一点,现在我将使用它:

在视图中:

代码语言:javascript
复制
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

在表单中:

代码语言:javascript
复制
class ChannelForm(Form):    
    _id         = HiddenField()
    name        = TextField(_('channel name'))    
    CITY1adapt  = TextField(_('adapt link')) 
    CITY2adapt  = TextField(_('adapt link'))
    #and so on

    submit      = SubmitField(_('Save'))

现在,当我“保存”它们的时候,我正在工作。

票数 1
EN

Stack Overflow用户

发布于 2012-10-07 09:05:17

您可以通过wtforms.fields.FormField使用嵌套表单。在您的例子中,应该是这样的:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12744136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档