Support separate sortable fields
Add support to sort a model column by a field other than the one being displayed. Fix the missing column issue in the list subtemplate. Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
@@ -50,17 +50,19 @@
|
||||
<th>{% trans 'Identifier' %}</th>
|
||||
{% else %}
|
||||
{% get_source_columns source=object_list only_identifier=True as source_column %}
|
||||
<th>
|
||||
{% if source_column.is_sortable %}
|
||||
<a href="{% get_sort_field_querystring column=source_column %}">{{ source_column.label }}
|
||||
{% if source_column.attribute == sort_field %}
|
||||
{% if icon_sort %}{{ icon_sort.render }}{% endif %}
|
||||
{% if source_column %}
|
||||
<th>
|
||||
{% if source_column.is_sortable %}
|
||||
<a href="{% get_sort_field_querystring column=source_column %}">{{ source_column.label }}
|
||||
{% if source_column.get_sort_field == sort_field %}
|
||||
{% if icon_sort %}{{ icon_sort.render }}{% endif %}
|
||||
{% endif %}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ source_column.label }}
|
||||
{% endif %}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ source_column.label }}
|
||||
{% endif %}
|
||||
</th>
|
||||
</th>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if not hide_columns %}
|
||||
@@ -69,7 +71,7 @@
|
||||
<th>
|
||||
{% if column.is_sortable %}
|
||||
<a href="{% get_sort_field_querystring column=column %}">{{ column.label }}
|
||||
{% if column.attribute == sort_field %}
|
||||
{% if column.get_sort_field == sort_field %}
|
||||
{% if icon_sort %}{{ icon_sort.render }}{% endif %}
|
||||
{% endif %}
|
||||
</a>
|
||||
|
||||
@@ -561,7 +561,12 @@ class SourceColumn(object):
|
||||
|
||||
return final_result
|
||||
|
||||
def __init__(self, source, attribute=None, empty_value=None, func=None, include_label=False, is_absolute_url=False, is_identifier=False, is_sortable=False, kwargs=None, label=None, order=None, views=None, widget=None):
|
||||
def __init__(
|
||||
self, source, attribute=None, empty_value=None, func=None,
|
||||
include_label=False, is_absolute_url=False, is_identifier=False,
|
||||
is_sortable=False, kwargs=None, label=None, order=None, sort_field=None,
|
||||
views=None, widget=None
|
||||
):
|
||||
self.source = source
|
||||
self._label = label
|
||||
self.attribute = attribute
|
||||
@@ -576,6 +581,7 @@ class SourceColumn(object):
|
||||
self.__class__._registry.setdefault(source, [])
|
||||
self.__class__._registry[source].append(self)
|
||||
self.label = None
|
||||
self.sort_field = sort_field
|
||||
self.views = views or []
|
||||
self.widget = widget
|
||||
|
||||
@@ -603,6 +609,12 @@ class SourceColumn(object):
|
||||
|
||||
self.label = self._label
|
||||
|
||||
def get_sort_field(self):
|
||||
if self.sort_field:
|
||||
return self.sort_field
|
||||
else:
|
||||
return self.attribute
|
||||
|
||||
def get_sort_field_querystring(self, context):
|
||||
# We do this to get an mutable copy we can modify
|
||||
querystring = context.request.GET.copy()
|
||||
@@ -612,7 +624,7 @@ class SourceColumn(object):
|
||||
TEXT_SORT_ORDER_VARIABLE_NAME, TEXT_SORT_ORDER_CHOICE_DESCENDING
|
||||
)
|
||||
|
||||
if previous_sort_field != self.attribute:
|
||||
if previous_sort_field != self.get_sort_field():
|
||||
sort_order = TEXT_SORT_ORDER_CHOICE_ASCENDING
|
||||
else:
|
||||
if previous_sort_order == TEXT_SORT_ORDER_CHOICE_DESCENDING:
|
||||
@@ -620,7 +632,7 @@ class SourceColumn(object):
|
||||
else:
|
||||
sort_order = TEXT_SORT_ORDER_CHOICE_DESCENDING
|
||||
|
||||
querystring[TEXT_SORT_FIELD_PARAMETER] = self.attribute
|
||||
querystring[TEXT_SORT_FIELD_PARAMETER] = self.get_sort_field()
|
||||
querystring[TEXT_SORT_ORDER_PARAMETER] = sort_order
|
||||
|
||||
return '?{}'.format(querystring.urlencode())
|
||||
|
||||
Reference in New Issue
Block a user