2

Я использую Django formset для этой модели:Пользовательские 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, каждая итерация которого содержит один <tr> элемент, содержащий <th> и <td>. Как это:

<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

+0

Put правило в таблице стилей (' начертание шрифта: normal'). Или используйте 'td' вместо' th'. –

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> 
Смежные вопросы