2013-02-19 3 views
1

Когда django-tables2 отображает несортированную таблицу и я хочу сортировать по одному столбцу, я нажимаю на нее, поведение по умолчанию заключается в сортировке в порядке возрастания.Django tables2 set default sort to descending

Есть ли способ изменить его так, чтобы первый щелчок сортировал по убыванию?

ответ

3

Это можно сделать, вот как.

Сначала вам необходимо переопределить шаблон 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 для получения дополнительной информации.

+0

Спасибо, работал шарм! - Я добрался до этого места в шаблоне, но не знал о фильтрах .opposite и | default, который является очень аккуратным способом сохранить порядок вещей. – Kerridge0