Wtforms-使用每个键有两个值的表单字段创建字典

Wtforms- Create Dict using formfield that has two values per key

我希望能够将 CD 上每个曲目的曲目名称和开始时间收集到字典或 table 中的 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')

但是,这不会将时间与相应的曲目相关联。执行此类操作的推荐方法是什么?

你想要这样的东西:

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"}, ... ]

更多信息:

  • 在此处查看有关 Field Enclosures 的更多信息。
  • A more extensive example