Сортировка связанных элементов в шаблоне Django

Можно ли отсортировать набор связанных элементов в Шаблон 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 %}

Увы, приведенный выше синтаксис не работает (он дает пустой список), как и другие варианты, которые я придумал (сообщалось о множестве синтаксических ошибок, но без радости).

Я, конечно, мог бы создать какой-то массив отсортированных списков посетителей, на мой взгляд, но это уродливое и хрупкое (и я уже упоминал уродливое) решение.

Излишне говорить, но я скажу во всяком случае, я просмотрел онлайн-документы и поискал переполнение стека и архивы django-user, не обнаружив ничего полезного (ах, если бы только набор запросов был словарным dictsort, но это не так, и это не так '' t)

=============================================== =

Отредактировано, чтобы добавить дополнительные мысли после принятия ответа Таумаса.


Таумас обратился к проблеме точно так, как я ее представил, хотя решение было не таким, как я ожидал.В результате я узнал полезную технику, которую можно использовать и в других ситуациях.

В ответе Тома был предложен подход, который я уже упоминал в своем OP и предварительно отклонил как «уродливый».

"Уродливое" было интуитивной реакцией, и я хотел прояснить, что с этим не так. Поступая так, я понял, что это был уродливый подход, потому что я был зациклен на идее передать набор запросов в шаблон для отображения. Если я ослаблю это требование, появится некрасивый подход, который должен сработать.

Я еще не пробовал это, но предположим, что вместо передачи набора запросов код представления повторял набор запросов, создавая список событий, а затем украсил каждое событие набором запросов для соответствующих участников, которые БЫЛО отсортировано (или отфильтровано, или как-то еще) желаемым образом. Примерно так:

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 %}

Обратной стороной является то, что представление должно «актуализировать» все события сразу, что могло бы стать проблемой, если бы было большое количество событий. Конечно, можно добавить нумерацию страниц, но это значительно усложняет просмотр.

Положительным моментом является то, что код «подготовить данные для отображения» находится в представлении, которому он принадлежит, позволяя шаблону сфокусироваться на форматировании данных, предоставляемых представлением для отображения. Это правильно и правильно.

Итак, я планирую использовать технику Таумаса для больших таблиц и описанную выше технику для маленьких. таблицы, с определением больших и малых оставлены читателю (ухмыляется)

77
задан shad0w_wa1k3r 15 May 2017 в 10:55
поделиться