Это можно сделать, вот как.
Сначала вам необходимо переопределить шаблон table.html по умолчанию, который используется для таблицы рендеринга (если вы еще не используете свой собственный шаблон). Вы можете начать с того, что включено в django-tables2.
Во-вторых, в шаблоне, найти якорь, используемый для сортировки:
{% if column.orderable %}
<th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}">{{ column.header }}</a></th>
{% else %}
И изменить это:
{% if column.orderable %}
{% with "-"|add:column.name as sort_col_name %}
<th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.opposite|default:sort_col_name %}">{{ column.header }}</a></th>
{% endwith %}
{% else %}
Таким образом, мы в основном только добавить -
перед именем столбца по умолчанию для того, чтобы заставить нисходящую сортировку в случае загрузки страницы без сортировки и обращения к .opposite
вместо .next
. Мы должны это сделать, потому что .next
всегда будет определяться, тогда как .opposite
будет None на загрузке страницы без сортировки, и фильтр по умолчанию будет выполнен. Когда сортировка определена, .opposite
правильно переключит порядок сортировки.
Обратите внимание, что это не проверено, и если у вас есть проблемы, загляните в django-tables2 source для получения дополнительной информации.
Спасибо, работал шарм! - Я добрался до этого места в шаблоне, но не знал о фильтрах .opposite и | default, который является очень аккуратным способом сохранить порядок вещей. – Kerridge0