Скрытый ввод в Django отображается как <td> в html

Я использую modelformset для того, чтобы позволить пользователю добавлять/редактировать/удалять пункты меню ресторана.

FoodItemFormset = modelformset_factory(FoodItem, fields = '__all__', can_delete = True)

Затем я перебираю все формы в моем шаблоне и отображаю их в таблице:

  <table>
    <tr>
      <th>Food Item</th>
      <th></th> <!-- empty <th> lines up with hidden input field -->
      <th>Delete</th>
    </tr>
    {% for form in food_formset  %}
      <tr>
        {% for field in form %}
          <td>{{ field }}</td>
        {% endfor %}
      </tr>
    {% endfor %}
  </table>
  <input type="submit" name="" value="Submit">

Однако этот атрибут can_delete приводит не только к отображению флажка, но и к отображению скрытого поля, содержащего id объекта, как фактического элемента таблицы, что приводит к пустому желобу между содержимым таблицы.

<td><input type="text" name="form-0-name" value="Mozzarella Sticks" maxlength="200" id="id_form-0-name"></td>
<td><input type="hidden" name="form-0-id" value="2" id="id_form-0-id"></td> <!-- this just looks like an empty gutter -->
<td><input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE"></td>

Есть ли способ обойти это? Спасибо за любую помощь.

Переберите form.visible_fields, чтобы включить только видимые поля

{% for field in form.visible_fields %}
  <td>{{ field }}</td>
{% endfor %}

Вам также нужно будет отобразить скрытые поля, но это не обязательно должно быть в собственной ячейке таблицы

{% for hidden in form.hidden_fields %}
  {{ hidden }}
{% endfor %}
Вернуться на верх