Подтвердить что ты не робот

Настроить форму фляжки как таблицу

Я довольно долго кусаю ногти на этом. В моем приложении Flask у меня есть база данных продуктов, для которой в приложении у меня есть страница, которая запрашивает каждый столбец продукта в таблице.

Например, у меня будет продукт 1234, для которого я мог бы просмотреть детали (например, столбцы базы данных) в example.com/items/1234, которые дадут мне следующее:

<div class="container">
  <div class="content">
  <a href="/item">Back</a>
  <table class="table">
  <thead>
    <tr>
      <th>#</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Detail-1<th>
      <td>Example</td>
    </tr>
    <tr>
       <th scope="row">Detail-2</th>
       <td>Example</td>
    </tr>

То, с чем я борюсь, следующее:

Я хотел бы добавить новые продукты с одинаковым стилем таблицы. Для этого я создал форму следующего вида:

class NewArticleForm(FlaskForm):
    detail_1 = StringField("Detail-1")
    detail_2 = IntegerField("Detail-2")
    ...
    submit = SubmitField("Submit")

Теперь я полностью потерял, как настроить внешний вид формы в шаблоне за пределами {{ wtf.quick_form(form) }}. Я пробовал следующее:

<form method="POST">
<table class="table">
  {% for name in form %}
  <tr>
    <th scope="row">{{ name.label }}</th>
    <td>{{ name }}</td>
  </tr>
  {% endfor %}
 </table>
 </form>

Таблица выглядит хорошо (по крайней мере), но запрос не отправляется правильно, я полагаю. Страница правильно загружается с помощью "POST /url HTTP/1.1", но, похоже, она не проходит правильно.

Что я имею в виду, так это то, что, хотя запрос отправляется правильно, я вижу, что я запускаю приложение через сервер Flask. Однако кажется, что в базу данных ничего не передается. Страница просто перезагружается с введенными данными, все еще в полях и ничего не передается в базу данных. Если я просто использую wtf.quick_form, тогда данные будут правильно отправлены в базу данных.

Итак, как я могу правильно настроить внешний вид формы и/или решающий шаг, я пропустил?

4b9b3361

Ответ 1

Хорошо, это на самом деле смущает. Мне удалось решить это самостоятельно, и мальчик был глупым решением.

Причина, по которой ничего не передавалась в базу данных, заключалась в том, что если некоторые поля были пустыми (которые не были указаны в форме), они были интерпретированы как строковые поля, что, конечно же, дало бы ошибку для целых полей.

Проблема заключалась в том, что, как вы можете видеть в моем шаблоне кода, я не включал код, чтобы показывать какие-либо ошибки при отправке полей. Я изменил код шаблона следующим образом:

{% macro render_field(field) %}
  <th scope="row">{{ field.label }}
  <td>{{ field(**kwargs)|safe }}
  {% if field.errors %}
    <ul class=errors>
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
  {% endif %}
{% endmacro %}

<form method="POST">
<table class="table">
  {{ form.csrf_token }}
  {% for name in form %}
    <tr>
    {{ render_field(name) }}
    </tr>
  {% endfor %}
</table>
</form> 

Теперь я буду склонять голову от стыда и надеяться, что когда-нибудь это может кому-то помочь.