2010-02-10 65 views
10

什麼是Django水平呈現formset的方式,即每個表單一行? as_table方法垂直生成多個表單(使用標籤)。我需要表格行中的表單字段(每個表單一行),標籤應該在最上面。我沒有看到任何東西。這是由於某種原因而不鼓勵嗎?Django formset中的水平(每行)表格

我應該澄清,我實際上想要表,因爲我將使用的UI表小部件。那張桌子上應該有標籤。

所以我期望的結構是:

<table> 
    <thead> 
    <tr><th>column1</th><th>column2</th></tr> 
    </thead> 
    <tbody> 
    <tr><td>form1.value1</td><td>form1.value2</td></tr> 
... 
    </tbody> 
</table> 

回答

21

你可能想嘗試這樣http://www.djangosnippets.org/snippets/1442/

{{ 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 }}</th> 
    {% 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> 
+5

是的,這是它。放入模板是一個冗長的事情。有了這麼冗長的東西,你會希望它可以像as_table一樣的方法,或者你想有能力用參數調用模板(而不僅僅是包含它們)。我真的很驚訝,像Django這樣成熟的東西沒有這個框。 – kmt 2010-02-10 04:10:38

+4

我通常將其作爲通用模板添加(保存爲formset_table.html),然後對於每個通過{%include「formset_table.html」%}的formset模板,但我同意它會很好,它可以呈現爲內置方法。 – Dave 2010-02-10 16:01:14

+2

我最終也這樣做了。而且因爲我有一個包含多個這樣的表單的頁面,我最終使用with標籤對它進行了參數化。 – kmt 2010-02-10 20:35:40

6

我建議使用form.as_ul,並與你的CSS樣式它使這一切在一排。你可以通過ul li { display: inline; }來做到這一點,當然,如果你不想以這種方式影響所有的UL,就可以替換一個類或ID。

這裏的Django文檔的相關部分:http://docs.djangoproject.com/en/dev/topics/forms/#displaying-a-form-using-a-template

編輯: 爲了解決您的桌子需要,你想想要做這樣的事情...編輯更多一些。

很難將所有這些表單放在一個表中,並且仍然有有效的HTML。一個表單元素可以圍繞一個表格,或者位於<td>之內......雖然這可能仍然有效。

<thead> 
    <tr> 
    {% for field in form %} 
    <th>{{ field.label }}</th> 
    {% endfor %} 
    </tr> 
</thead> 

<tbody> 
<tr class="table_row"> 
    <form action="/something/" method="post"> 
    {% for field in form %} 
     <td> 
     <table> 
     <tr><td>{{ field.label }}</td></tr> 
     <tr><td>{{ field }}</td></tr> 
     </table> 
     </td> 
    {% endfor %} 
    </form> 
    </tr> 
</tbody> 
+0

東西看我的說明,請。我其實*需要*一張桌子。 – kmt 2010-02-10 03:04:07

+0

我想你將不得不在模板中使用自定義,然後,而不是使用自動生成HTML的方法。那麼你可以把它放在一個''。 – JAL 2010-02-10 03:29:09

+0

我看到您的更新。謝謝!但是,好吧,我需要標籤在之上,高於所有行,對於每個單獨的行都不重複。 我基本上需要一個記錄集的表格表示。驚奇的是,我找不到這個Google搜索。 – kmt 2010-02-10 03:45:13