2010-02-10 2 views
10

formset을 가로로, 즉 폼 당 하나의 행으로 표시하는 Django의 방법은 무엇입니까? as_table 메서드는 레이블이있는 여러 개의 양식을 세로로 생성합니다. 양식 행 (양식 당 하나의 행)에 양식 필드가 있어야하고 레이블이 맨 위에 있어야합니다. 상자에서 아무것도 볼 수 없습니다. 이것은 어떤 이유로 낙담합니까?Django formset에서 수평 (행당) 폼

나는 실제로 내가 을 원한다는 것을 분명히해야한다. UI 테이블 위젯을 사용하기 때문에 테이블이 필요하다. 그리고 그 테이블에는 라벨이 있어야합니다.

그래서 내 원하는 구조는 다음과 같습니다 내가 form.as_ul를 사용하여 하나의 행에 모든 것을 확인하기 위해 CSS로 스타일링 제안

<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과 같은 메소드로 원하거나 매개 변수로 템플릿을 호출 할 수 있기를 원할 것입니다. 나는 장고처럼 성숙한 무언가가이 상자를 가지고 있지 않다는 것에 정말로 놀랐다. – kmt

+4

일반적으로이 템플릿을 일반 템플릿 (formset_table.html로 저장)으로 추가 한 다음 각 formset 템플릿에 대해 {% include "formset_table.html"%}을 전달하지만 내장 메소드로 렌더링 할 수 있다는 점에 동의합니다. . – Dave

+2

나는 그 일을 끝내었다. 그런 폼이 여러 개있는 페이지가 있기 때문에 with 태그를 사용하여 매개 변수화를 수행했습니다. – kmt

6

. ul li { display: inline; }으로 그 작업을 수행 할 수 있습니다. 물론 그런 식으로 모든 UL에 영향을 미치지 않으려면 클래스 나 ID로 대체하십시오.

여기 장고 문서의 관련 섹션의 : 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

+0

HTML을 자동으로 생성하는 메서드를 사용하는 대신 템플릿의 사용자 지정 작업을 수행해야 할 것입니다. 그런 다음 하나의 ''에 모두 넣을 수 있습니다. – JAL

+0

업데이트가 보입니다. 감사! 그러나 각 행에 대해 반복하지 않고 레이블 위에 의 레이블이 필요합니다. 기본적으로 레코드 세트의 테이블 표현이 필요합니다. 내가이 인터넷 검색을 찾을 수 없다는 놀라운 사실을 찾아라. – kmt