DJango 템플릿에서 관련 항목 세트를 정렬 할 수 있습니까?
즉,이 코드 (명확성을 위해 HTML 태그가 생략 됨) :
{% for event in eventsCollection %}
{{ event.location }}
{% for attendee in event.attendee_set.all %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
내가 원하는 거의 정확하게 표시합니다 . 내가 변경하고 싶은 유일한 것은 성으로 정렬 할 참석자 목록입니다. 나는 다음과 같이 말하려고 시도했습니다.
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_set.order_by__last_name %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
아아, 위의 구문은 작동하지 않으며 (빈 목록이 생성됨) 내가 생각했던 다른 변형도 없습니다 (많은 구문 오류가보고되었지만 기쁨은 없음).
물론 내 관점에서 일종의 정렬 된 참석자 목록을 생성 할 수는 있지만 그것은 추하고 깨지기 쉬운 (그리고 추악한 것을 언급 했습니까) 해결책입니다.
말할 필요도없이, 어쨌든 나는 그것을 말할 것이다. 나는 온라인 문서를 숙독하고 도움이되는 것을 찾지 않고 Stack Overflow와 django-user의 아카이브를 검색했다 (아, 쿼리 세트 만 사전 dictsort라면 직업이지만 그렇지 않습니다)
=============================================
Tawmas의 답변을 수락 한 후 추가 생각을 추가하도록 편집되었습니다.
Tawmas는 내가 제시 한대로 문제를 정확히 해결했지만 해결책은 내가 예상 한 것과는 달랐습니다. 그 결과 다른 상황에서도 사용할 수있는 유용한 기술을 배웠습니다.
Tom의 대답은 내가 OP에서 이미 언급 한 접근 방식을 제안했고 "추악한"것으로 잠정적으로 거부했습니다.
"못생긴"은 직감 반응이었고, 나는 그것에 무엇이 잘못되었는지 명확히하고 싶었습니다. 그렇게하면서 나는 그것이 추악한 접근 방식 인 이유가 렌더링 할 템플릿에 쿼리 세트를 전달한다는 생각에 매 달렸 기 때문이라는 것을 깨달았습니다. 이 요구 사항을 완화하면 작동해야 할 추악한 접근 방식이 있습니다.
나는 아직 시도했지만 오히려 검색어 세트를 전달하는 대신, 뷰 코드는 이벤트의 다음 해당 참석자에 대한 쿼리 세트 각 이벤트 장식 목록 생성 쿼리 집합을 통해 반복한다고 가정하지 않은 WAS , 분류를 (또는 필터링 또는 무엇이든) 원하는 방식으로. 다음과 같이 :
eventCollection = []
events = Event.object.[filtered and sorted to taste]
for event in events:
event.attendee_list = event.attendee_set.[filtered and sorted to taste]
eventCollection.append(event)
이제 템플릿은 다음과 같습니다.
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_list %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
단점은 모든 이벤트를 한 번에 "실현"해야한다는 것입니다. 이벤트가 많으면 문제가 될 수 있습니다. 물론 페이지 매김을 추가 할 수 있지만 이는보기를 상당히 복잡하게 만듭니다.
장점은 "표시 할 데이터 준비"코드가보기에 속한보기에 표시되어 표시를 위해보기에서 제공하는 데이터의 서식 지정에 템플릿이 집중할 수 있다는 것입니다. 이것은 옳고 적절합니다.
그래서 내 계획은 큰 테이블에는 Tawmas의 기술을 사용하고 작은 테이블에는 위의 기술을 사용하고 크고 작은 정의는 독자에게 맡기는 것입니다 (웃음).