我有一个django formset,我试图逐行渲染它。相反,表单是逐列渲染(如垂直形式而不是水平)。我正在使用django的form.as_table但它仍然无法正确呈现。任何想法?
form.html:
<form id="formset" class="original" action="{% url 'inventory:requests' inventory.id %}" method="post">{% csrf_token %}
<!-- <a href="#" id="insert-more"> Add New Row </a> -->
{{formset.management_form}}
{% for form in formset.forms %}
{{ form.non_field_errors }}
{{ form.errors}}
<div class='item'>
<table>{{ form.as_table }}</table>
<p style=""><a class="delete" href="#">Delete</a></p>
</div>
{% endfor %}
<p><a id="add" href="#">Add another item</a></p>
<input type="submit" name="submit" value="Request Blocks" id="submitButton">
</form>
答案 0 :(得分:1)
表单的as_table
方法仅使用<tr></td>
代替<div>
来呈现您的表单 - 但它将以相同的方式呈现在视觉上。
要轻松控制表单,请考虑使用django-crispy-forms
。以下是如何使表单水平渲染:
在forms.py
中,添加此内容(除了正常代码外):
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
class ExampleFormSetHelper(FormHelper):
def __init__(self, *args, **kwargs):
super(ExampleFormSetHelper, self).__init__(*args, **kwargs)
self.form_method = 'post'
self.render_required_fields = True
self.template = 'bootstrap/table_inline_formset.html'
self.add_input(Submit("submit", "Save"))
接下来,在views.py
:
from .forms import ExampleFormsetHelper, YourFormSet
def formset_view(request):
formset = YourFormSet()
helper = ExampleFormSetHelper()
return render(request, 'template.html',
{'formset': formset, 'helper': helper})
最后,在您的模板中,您只需要:
{% load crispy_forms_tags %}
{% crispy formset helper %}
有关详细信息,documentation具有详细信息。