Wtforms-使用每个键有两个值的formfield创建Dict

时间:2017-08-16 12:24:12

标签: python dictionary wtforms flask-wtforms formfield

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

Highcharts.chart('container', {

    chart: { events: {
                click: function(event) {
                  var $this = this;
                  _.each(this.series[0].points, function(p){ $this.tooltip.refresh(p)});
                }
              }
},
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
                                 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },

    tooltip: {
        shared: true
    },

    series: [
       {
        data: [216.4, 194.1, 95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5],
        type: 'scatter'
    }]
});

这会创建一个如下所示的字典:

{" track1":" songname1"," track2":" songname2"," track3":& #34; songname3"," track4":" songname4"}

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

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

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

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

1 个答案:

答案 0 :(得分: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"}, ... ]

更多信息: