【问题标题】:Wtforms- Create Dict using formfield that has two values per keyWtforms-使用每个键有两个值的表单域创建字典
【发布时间】:2018-01-24 14:10:23
【问题描述】:

我希望能够将 cd 上每个曲目的曲目名称和开始时间收集到表中的 dict 或 json 列中。 我已经定义了一个表单域来捕获与曲目名称相关的数据并将其保存在字典中:

class SeperateTracks(NoCsrfForm):
        track1 = TextField('track1')
        track2 = TextField('track2')
        track3 = TextField('track3')
        track4 = TextField('track4')

class SendForm(Form):
        alltracks = FormField(SeperateTracks)

这会创建一个看起来像这样的字典:

{“track1”:“songname1”,“track2”:“songname2”,“track3”:“songname3”,“track4”:“songname4”}

我想要实现的是,每个轨道有两个 TextField——一个用于轨道名称,一个用于轨道的开始时间。 我意识到,就创建更多字段来适应这一点而言,我可以简单地创建更多文本字段来保存开始时间数据,如下所示:

class SeperateTracks(NoCsrfForm):
        track1 = TextField('track1')
        track2 = TextField('track2')
        track3 = TextField('track3')
        track4 = TextField('track4')
        starttime1 = TextField('starttime1')
        starttime2 = TextField('starttime2')
        starttime3 = TextField('starttime3') 
        starttime4 = TextField('starttime4')

但是,这不会将时间与相应的曲目相关联。做这种事情的推荐方法是什么?

【问题讨论】:

    标签: python dictionary wtforms flask-wtforms formfield


    【解决方案1】:

    你会想要这样的:

    class Track(NoCsrfForm):
        songname = StringField('Song Name')
        starttime = StringField('start time')
    
    class SeparateTracks(NoCsrfForm):
        tracks = FieldList(FormField(Track), min_entries=1, max_entries=4)
    

    我根据您的示例对max_entries 做出了假设,但这不是严格要求的,您可以通过这种方式管理 1 到 N 个条目之间的任意位置。

    python 中的数据如下所示:

    [{songname: "name 1", starttime: "123"}, {songname: "name 2", starttime: "456"}, ... ]
    

    更多信息:

    【讨论】:

    • 非常感谢,我会试一试并回复您。一个问题 - 例如,如果我想渲染最多 4 个条目中的一个特定条目,例如第三个,我将如何渲染它。我假设渲染 min_entries 的值是 {{ form.tracks }} 但如果我想渲染一个特定的值怎么办?
    • 您可以渲染{{ form.tracks.entries[2] }} 以获取第三个条目(零索引)。您还可以迭代 form.tracks 以获取所有条目等等。
    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多