4

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の「名前」。しかし、「ストリーム」は、それを認識せず、次のようなものに渡しませんでした。

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'))

私は何をすべきか?または、オブジェクトのデータがフォームのパラメータに渡される方法を変更する方法はありますか?

4

2 に答える 2

1

これはドキュメントでよくわかりました。今はこれを使用します。

ビューで:

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-08T04:37:17.400 に答える
1

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)
于 2012-10-07T01:05:17.303 に答える