diff --git a/README b/README index 03d9a2a..611ed95 100644 --- a/README +++ b/README @@ -45,7 +45,8 @@ have an inner Meta class that inherits from ``Sortable.Meta`` return self.title -It is also possible to order objects relative to another object that is a ForeignKey: +It is also possible to order objects relative to another object that is a ForeignKey, +even if that model does not inherit from Sortable: from adminsortable.fields import SortableForeignKey @@ -129,16 +130,16 @@ Status admin-sortable is currently used in production. -What's new in 1.3 +What's new in 1.3.2 ============= -- Refactored ``sortable_by`` to subclass ForeignKey rather than a property or classmethod. - No more extra property hackishness. +- Fixed an issue that prevented sorting on classes that specified a SortableForeignKey +class, where the SortableForeignKey model itself did not inherit from Sortable. Features ============= Current --------- -- Supports Django 1.3+ +- Supports Django 1.4+ - Adds an admin view to any model that inherits from Sortable and SortableAdmin that allows you to drag and drop objects into any order via jQueryUI. - Adds drag and drop ordering to Tabular and Stacked Inline models that inherit from diff --git a/adminsortable/__init__.py b/adminsortable/__init__.py index 20acfce..d9bae1e 100755 --- a/adminsortable/__init__.py +++ b/adminsortable/__init__.py @@ -1,4 +1,4 @@ -VERSION = (1, 3, 1) # following PEP 386 +VERSION = (1, 3, 2) # following PEP 386 DEV_N = None diff --git a/adminsortable/admin.py b/adminsortable/admin.py index 794d94b..2ee3ba8 100644 --- a/adminsortable/admin.py +++ b/adminsortable/admin.py @@ -59,7 +59,6 @@ class SortableAdmin(ModelAdmin): changed via drag-and-drop. """ opts = self.model._meta - admin_site = self.admin_site has_perm = request.user.has_perm(opts.app_label + '.' + opts.get_change_permission()) objects = self.model.objects.all() @@ -87,7 +86,10 @@ class SortableAdmin(ModelAdmin): sortable_by_class_display_name = sortable_by_fk.rel.to._meta.verbose_name_plural sortable_by_class = sortable_by_fk.rel.to sortable_by_expression = sortable_by_fk.name.lower() - sortable_by_class_is_sortable = sortable_by_class.is_sortable() + try: + sortable_by_class_is_sortable = sortable_by_class.is_sortable() + except AttributeError: + sortable_by_class_is_sortable = False else: #model is not sortable by another model diff --git a/adminsortable/templates/adminsortable/shared/list_items.html b/adminsortable/templates/adminsortable/shared/list_items.html index c799b8d..bfc21a6 100644 --- a/adminsortable/templates/adminsortable/shared/list_items.html +++ b/adminsortable/templates/adminsortable/shared/list_items.html @@ -1,6 +1,12 @@ {% load adminsortable_tags %} -{% for object in list_objects %} -
  • - {% render_object_rep object %} -
  • -{% endfor %} \ No newline at end of file +{% with list_objects_length=list_objects|length %} + {% for object in list_objects %} +
  • + {% if list_objects_length > 1 %} + {% render_object_rep object %} + {% else %} + {{ object }} + {% endif %} +
  • + {% endfor %} +{% endwith %} diff --git a/adminsortable/templates/adminsortable/shared/nested_objects.html b/adminsortable/templates/adminsortable/shared/nested_objects.html index bcabb55..c979302 100644 --- a/adminsortable/templates/adminsortable/shared/nested_objects.html +++ b/adminsortable/templates/adminsortable/shared/nested_objects.html @@ -5,12 +5,18 @@ {% for regrouped_object in regrouped_objects %}
  • {% with object=regrouped_object.grouper %} - {% render_object_rep object %} + {% if sortable_by_class_is_sortable %} + {% render_object_rep object %} + {% else %} + {{ object }} + {% endif %} {% endwith %} {% if regrouped_object.list %} -