Flask WTForms Динамические редактируемые поля таблицы с именами полей - PullRequest
0 голосов
/ 04 июля 2018

Как я могу получить имена полей для возврата в виде текста / строки?

Выделенные «Имена полей», которые я хочу вернуть как текст, а не поля

Я динамически создаю список полей и затем добавляю значения. Но я не могу найти способ вернуть имена полей в виде простого текста. Приведенный ниже код добавляет их в поле (fieldname) - это единственный способ, которым я смог их вернуть.

class ContractFields(FlaskForm):
    fieldname = StringField()
    fieldvalue = StringField()

class ContractForm(FlaskForm):
    title = StringField('title')
    contractfieldlist = FieldList(FormField(ContractFields))

@app.route('/tester.html', methods=['GET','POST'])
def contractfields():
    form = ContractForm()
    for f in object:
            document_form = ContractFields()
            document_form.fieldname = f.name #need this list object to return as table text, not a field
            document_form.fieldvalue = f.value

            form.contractfieldlist.append_entry(document_form)

    return render_template('tester.html', form = form)

А из шаблона:

<div>
  <form action="" method="post" name="form">
    {{ form.hidden_tag() }}
    <div>
      <table>
        <tr>
          <th> ListNumber </th>
          <th> Field Name </th>
          <th> Field Value </th>
        </tr>
        {% for items in form.contractfieldlist %}
        <tr>
          <td>{{ items.label }}</td>
          <td>{{ items.fieldname }}</td>
          <td>{{ items.fieldvalue }}</td>
        </tr>
        {% endfor %}
      </table>
    </div>
    <p><input type="submit" name="edit" value="Send"></p>
  </form>
</div>

1 Ответ

0 голосов
/ 05 июля 2018

Мой опыт работы с Python в основном ограничен ETL и преобразованием данных, поэтому я не понимаю, почему это было так сложно. Но спустя слишком много часов я наконец обнаружил, что следующее решение сработало для меня .

Специально изменив связанную выдержку из вышеприведенного поста, сделайте следующее:

class ContractFields(FlaskForm):
        fieldname = HiddenField()
        fieldvalue = StringField()
        def __init__(self, *args, **kwargs):
                super(ContractFields, self).__init__(*args, **kwargs)
                if 'obj' in kwargs and kwargs['obj'] is not None:
                        self.fieldvalue.label.text = kwargs['obj'].fieldname

И шаблон HTML для:

      <td>{{ items.label }}</td>
      <td>{{ items.fieldvalue.label }}</td>
      <td>{{ items.fieldvalue }}</td>
...