2

我使用的是Django的formset這種模式:在Django自定義表單集模板

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 

我怎樣才能做到這一點?

回答

2

在模板中,你有兩個<tr>元素,每個元素都包含在form.visible_fields一個循環,每次循環都產生一個<th><td>

改變這一輪,讓您有一個遍歷form.visible_fields,每次迭代其中包括含有<th><td>一個<tr>元素。就像這樣:

<table id="formset" class="form"> 
{% for form in formset.forms %} 
    {% for field in form.visible_fields %} 
    <tr class="{% cycle row1,row2 %}"> 
    <th>{{ field.label|capfirst }}</th> 
    <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> 
    </tr> 
    {% endfor %} 
{% endfor %}  
</table> 
+0

雅你是對的,字段名是大膽的風格,如何改變把一個規則在樣式表正常的 – user2086641 2013-04-06 09:59:35

+0

('字體重量:normal')。或者用'td'代替'th'。 – 2013-04-06 10:08:07

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>