Django 隐藏输入被渲染为 <td> html



我使用的是一个模型集,允许用户在餐厅菜单上添加/编辑/删除食物。

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 %}

相关内容

最新更新