2012-10-05 2 views
4

저는 파이썬 및 플라스 크 프레임 워크를 처음 사용합니다.Flask-WTF : 양식을 위해 구조화 된 객체를 전달하는 방법

제 문제는 편집 페이지를 만들어야한다는 것입니다. 그래서 모든 객체의 존재 정보를 폼에 전달해야합니다. 세부 사항 :

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

어떻게해야합니까? 어쨌든 개체의 데이터가 양식의 매개 변수로 전달되는 방식을 수정해야합니까?

답변

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

이제는 "저장"할 때 작업 중입니다.

1

을 사용하여 중첩 된 양식을 사용할 수 있습니다. 귀하의 경우는이 같은 것입니다 : 문서에서 이걸 발견

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) 
+0

답해 주셔서 감사합니다. 하지만 여전히 channelObject에서 가져온 데이터를 미리 채울 수 없다는 것이 주요한 문제입니다. 나는이 코드를 의미 : channel = ChannelForm (request.form, obj = channel_obj) #로드 채널 양식 '스트림'에서 데이터를 양식에 전달할 수 없습니다. – LucVH