From 1aa4ee36d6db4cc4b0dc6753d2da79fe80c10bff Mon Sep 17 00:00:00 2001 From: Kevin Diale Date: Thu, 1 Aug 2013 12:00:03 -0400 Subject: [PATCH] Implemented ordering, tests in the next commit. --- djadmin2/settings.py | 4 ++-- djadmin2/types.py | 4 ++++ djadmin2/views.py | 8 ++++++++ example/blog/admin2.py | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/djadmin2/settings.py b/djadmin2/settings.py index 1203d0e..3e6c2ad 100644 --- a/djadmin2/settings.py +++ b/djadmin2/settings.py @@ -12,7 +12,7 @@ MODEL_ADMIN_ATTRS = ( 'list_display_links', 'list_filter', 'admin', 'search_fields', 'field_renderers', 'index_view', 'detail_view', 'create_view', 'update_view', 'delete_view', 'get_default_view_kwargs', - 'get_list_actions', 'actions_on_bottom', 'actions_on_top', - 'save_on_top', 'save_on_bottom', 'readonly_fields', ) + 'get_list_actions', 'get_ordering', 'actions_on_bottom', 'actions_on_top', + 'ordering', 'save_on_top', 'save_on_bottom', 'readonly_fields', ) ADMIN2_THEME_DIRECTORY = getattr(settings, "ADMIN2_THEME_DIRECTORY", "djadmin2theme_default") diff --git a/djadmin2/types.py b/djadmin2/types.py index 108d43a..3674d82 100644 --- a/djadmin2/types.py +++ b/djadmin2/types.py @@ -73,6 +73,7 @@ class ModelAdmin2(with_metaclass(ModelAdminBase2)): verbose_name = None verbose_name_plural = None model_admin_attributes = settings.MODEL_ADMIN_ATTRS + ordering = False save_on_top = False save_on_bottom = True @@ -261,6 +262,9 @@ class ModelAdmin2(with_metaclass(ModelAdminBase2)): } return actions_dict + def get_ordering(self, request): + return self.ordering + class Admin2Inline(extra_views.InlineFormSet): """ diff --git a/djadmin2/views.py b/djadmin2/views.py index c5a627d..d5830a3 100644 --- a/djadmin2/views.py +++ b/djadmin2/views.py @@ -153,6 +153,8 @@ class ModelListView(AdminModel2Mixin, generic.ListView): queryset, search_use_distinct = self.get_search_results( queryset, search_term) + queryset = self._modify_queryset_for_ordering(queryset) + if self.model_admin.list_filter: queryset = self.build_list_filter(queryset).qs @@ -166,6 +168,12 @@ class ModelListView(AdminModel2Mixin, generic.ListView): else: return queryset + def _modify_queryset_for_ordering(self, queryset): + ordering = self.model_admin.get_ordering(self.request) + if ordering: + queryset = queryset.order_by(*ordering) + return queryset + def _modify_queryset_for_sort(self, queryset): # If we are sorting AND the field exists on the model sort_by = self.request.GET.get('sort', None) diff --git a/example/blog/admin2.py b/example/blog/admin2.py index fb0d222..caf6c0c 100644 --- a/example/blog/admin2.py +++ b/example/blog/admin2.py @@ -35,6 +35,7 @@ class PostAdmin(djadmin2.ModelAdmin2): } save_on_top = True date_hierarchy = "published_date" + ordering = ["published_date", "title",] class CommentAdmin(djadmin2.ModelAdmin2):