我正在为这个模型使用Django formset:
class Book(models.Model):
book_id=models.AutoField(primary_key=True,unique=True)
book_name=models.CharField(max_length=30)
publisher_name=models.CharField(max_length=40)
author=models.ForeignKey(Author)
因此定义了formset:
BookFormset = inlineformset_factory(Author, Book,
fields=('book_id','book_name', 'publisher_name'), extra=1,
can_delete=False)
模板是:
{{ formset.non_form_errors.as_ul }}
<table id="formset" class="form">
{% for form in formset.forms %}
{% if forloop.first %}
<thead><tr>
{% for field in form.visible_fields %}
<th>{{ field.label|capfirst }}
{% endfor %}
</tr></thead>
{% endif %}
<tr class="{% cycle row1,row2 %}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
字段按列显示,但我希望它们按行显示。
上面的代码产生如下输出:
Book name Publisher name
book_field Publisher_field
我希望输出看起来像这样:
Book name book_field
Publisher name Publisher_field
我该怎么做?
答案 0 :(得分:2)
在您的模板中,您有两个<tr>
元素,每个元素都包含一个form.visible_fields
循环,每个元素的迭代生成一个<th>
或<td>
。< / p>
更改此轮次,以便您在form.visible_fields
上有一个循环,其中每个循环包含一个包含<tr>
和<th>
的{{1}}元素。像这样:
<td>
答案 1 :(得分:2)
上面的示例似乎显示了逐列布局,当formset呈现自身时,它似乎是默认布局。
要按行排序,请使用以下内容:
<table>
{% for form in formset.forms %}
{% if forloop.first %}
<thead>
{% for field in form.visible_fields %}
<th>{{ field.label }}</th>
{% endfor %}
</thead>
<tbody>
{% endif %}
<tr class="{% cycle row1,row2 %}">
{% for field in form.visible_fields %}
<td>
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field }}
</td>
{% endfor %}
</tr>
{% if forloop.last %}
</tbody>
{% endif %}
{% endfor %}
</table>