0

在我的项目中,我想创建几对 Select 字段来组合不同的材料(在材料的所有标签中进行选择,在 0.1 和 20 % 之间进行选择)。这是我的表格:

class MatForm(Form):
    mat = SelectField()

class List_Compose_Form(Form):
    list_mat = FieldList(FormField(MatForm))
    submit=SubmitField('Select Composition')

因此,我创建了一个函数来创建一个具有默认值的 Mat 表单列表,该列表具有所有键的默认值,例如 ('Batch(MAT)' 或 'MAT (%)') 以及所有相关的可能选择(可能标签列表或之间的范围0.1 和 20 :

def compose_form(等级):

raw_name = 'interface_app\grades_raw\\'+str(grades)+'_clnd.raw'
[dic_compose,dic_choice] = pickle.load(open(raw_name,'rb'))
all_mat_items = []
for key, values in dic_compose.items():
    mat_id = uuid.uuid1()
    mat_entry = MatForm(request.form)
    mat_entry.mat.label = key
    mat_entry.id = mat_id
    if re.search('%',str(key)) :
        choice = [(values,values)]
        choice += [(str(i/10),str(i/10)) for i in range(1,200)]
    else: 
        choice = [(values, values)]
        choice += [(dic_choice[key][i],dic_choice[key][i]) for i in range(1,len(dic_choice[key]))]
    mat_entry.mat.choices = choice
    all_mat_items.append(mat_entry)
return(all_mat_items)

这部分实际上正在工作,我确实可以创建我的作文: 作文页面

这是我创建列表并将数据保存在会话中的应用程序

@app.route("/compose",methods=['GET','POST']) 
@grade_required
def compose():
   the_grade=session['grade']
   session['dic_compos'] = {}
   form =List_Compose_Form(request.form)
   list_mat = compose_form(the_grade) 
   form.list_mat = list_mat
   if form.submit.data and form.validate():
       for k in form.list_mat :
           k.validate()
           session['dic_compos'].update({k.mat.label : k.mat.data})
       return redirect(url_for('test'))
   return render_template('compose.html',form=form)

但是由于某些未知原因,我从每个字段中获得的数据被第一个覆盖,例如: 组合后的会话字典

对我来说,这个问题可能与我的组合循环中的 MatForm(request.form) 或可能与我的 jinja2 模板有关:

<div class="table-responsive-sm">
  <form action="" method="post" role="form">
    <table id="data" class="table table-dark table-responsive overflow-auto" style="height:400px">
      <thead >
        <tr>
          <th>Labels</th>
          <th>Selected</th>
        </tr>
      </thead>
      <tbody>
        {% for mat_form in form.list_mat %}
          <tr>
            <th>{{mat_form.mat.label}}</th>
            <th>{{mat_form.mat}}</th> 
          </tr>
        {% endfor %}
      </form>
    </tbody>
    </table>
    <div>
      {{ form.submit }}
    </div>
  </form>

我尝试添加 csrf 令牌或使用不同名称的(_formhelpers.html)中的 render_field 以避免覆盖但没有任何效果。我从 2 天开始就在处理这个问题,所以欢迎每一个帮助。

如果您需要额外的精确度/解释,请告诉我这是我的第一个问题。

4

0 回答 0