Support marking columns as indetifier and sortable
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -22,7 +22,15 @@ from django_downloadview import (
|
||||
from pure_pagination.mixins import PaginationMixin
|
||||
|
||||
from .forms import ChoiceForm
|
||||
from .icons import icon_assign_remove_add, icon_assign_remove_remove
|
||||
from .icons import (
|
||||
icon_assign_remove_add, icon_assign_remove_remove, icon_sort_down,
|
||||
icon_sort_up
|
||||
)
|
||||
from .literals import (
|
||||
TEXT_SORT_FIELD_PARAMETER, TEXT_SORT_FIELD_VARIABLE_NAME,
|
||||
TEXT_SORT_ORDER_CHOICE_ASCENDING, TEXT_SORT_ORDER_PARAMETER,
|
||||
TEXT_SORT_ORDER_VARIABLE_NAME
|
||||
)
|
||||
from .mixins import (
|
||||
DeleteExtraDataMixin, DynamicFormViewMixin, ExtraContextMixin,
|
||||
FormExtraKwargsMixin, MultipleObjectMixin, ObjectActionMixin,
|
||||
@@ -495,12 +503,52 @@ class SingleObjectListView(PaginationMixin, ViewPermissionCheckMixin, ObjectList
|
||||
|
||||
return result
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(SingleObjectListView, self).get_context_data(**kwargs)
|
||||
|
||||
context.update(
|
||||
{
|
||||
TEXT_SORT_FIELD_VARIABLE_NAME: self.get_sort_field(),
|
||||
TEXT_SORT_ORDER_VARIABLE_NAME: self.get_sort_order(),
|
||||
'icon_sort': self.get_sort_icon(),
|
||||
}
|
||||
)
|
||||
return context
|
||||
|
||||
def get_paginate_by(self, queryset):
|
||||
return setting_paginate_by.value
|
||||
|
||||
def get_queryset(self):
|
||||
try:
|
||||
return super(SingleObjectListView, self).get_queryset()
|
||||
queryset = super(SingleObjectListView, self).get_queryset()
|
||||
except ImproperlyConfigured:
|
||||
self.queryset = self.get_object_list()
|
||||
return super(SingleObjectListView, self).get_queryset()
|
||||
queryset = super(SingleObjectListView, self).get_queryset()
|
||||
|
||||
self.field_name = self.get_sort_field()
|
||||
if self.get_sort_order() == TEXT_SORT_ORDER_CHOICE_ASCENDING:
|
||||
sort_order = ''
|
||||
else:
|
||||
sort_order = '-'
|
||||
|
||||
if self.field_name:
|
||||
queryset = queryset.order_by(
|
||||
'{}{}'.format(sort_order, self.field_name)
|
||||
)
|
||||
|
||||
return queryset
|
||||
|
||||
def get_sort_field(self):
|
||||
return self.request.GET.get(TEXT_SORT_FIELD_PARAMETER)
|
||||
|
||||
def get_sort_icon(self):
|
||||
sort_order = self.get_sort_order()
|
||||
if not sort_order:
|
||||
return
|
||||
elif sort_order == TEXT_SORT_ORDER_CHOICE_ASCENDING:
|
||||
return icon_sort_down
|
||||
else:
|
||||
return icon_sort_up
|
||||
|
||||
def get_sort_order(self):
|
||||
return self.request.GET.get(TEXT_SORT_ORDER_PARAMETER)
|
||||
|
||||
@@ -52,6 +52,8 @@ icon_social_paypal = Icon(
|
||||
icon_social_twitter = Icon(
|
||||
driver_name='fontawesomecss', css_classes='fab fa-twitter'
|
||||
)
|
||||
icon_sort_down = Icon(driver_name='fontawesome', symbol='sort-down')
|
||||
icon_sort_up = Icon(driver_name='fontawesome', symbol='sort-up')
|
||||
icon_source_code = Icon(driver_name='fontawesome', symbol='code-branch')
|
||||
icon_support = Icon(
|
||||
driver_name='fontawesome', symbol='phone'
|
||||
|
||||
@@ -11,6 +11,14 @@ MESSAGE_SQLITE_WARNING = _(
|
||||
'for development and testing, not for production.'
|
||||
)
|
||||
PYPI_URL = 'https://pypi.python.org/pypi'
|
||||
|
||||
TEXT_SORT_FIELD_PARAMETER = '_sort_field'
|
||||
TEXT_SORT_FIELD_VARIABLE_NAME = 'sort_field'
|
||||
TEXT_SORT_ORDER_CHOICE_ASCENDING = 'asc'
|
||||
TEXT_SORT_ORDER_CHOICE_DESCENDING = 'desc'
|
||||
TEXT_SORT_ORDER_PARAMETER = '_sort_order'
|
||||
TEXT_SORT_ORDER_VARIABLE_NAME = 'sort_order'
|
||||
|
||||
TIME_DELTA_UNIT_DAYS = 'days'
|
||||
TIME_DELTA_UNIT_HOURS = 'hours'
|
||||
TIME_DELTA_UNIT_MINUTES = 'minutes'
|
||||
|
||||
Reference in New Issue
Block a user