From 698ca136d599ad9e283d92a454891ff163cdf467 Mon Sep 17 00:00:00 2001 From: Brandon Taylor Date: Mon, 21 Dec 2015 14:11:13 -0500 Subject: [PATCH] Refactored admin url patterns to be compatible with Django 1.8 or higher. Refactored sample_project imports to be compatible with Django 1.9 Updated unit tests for get_next/previous. Version bump to 2.0.8. Fixed typo in docs. --- README.md | 9 ++++++--- adminsortable/__init__.py | 2 +- adminsortable/admin.py | 36 ++++++++++++++++++++++++------------ adminsortable/models.py | 4 ++-- sample_project/app/models.py | 10 ++++++++-- 5 files changed, 41 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 15c497e..99ce572 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://travis-ci.org/iambrandontaylor/django-admin-sortable.svg?branch=master)](https://travis-ci.org/iambrandontaylor/django-admin-sortable) -Current version: 2.0.7 +Current version: 2.0.8 This project makes it easy to add drag-and-drop ordering to any model in Django admin. Inlines for a sortable model may also be made sortable, @@ -457,8 +457,11 @@ ordering on top of that just seemed a little much in my opinion. django-admin-sortable is currently used in production. -### What's new in 2.0.7? -- Minor enhancement to determine which element to highlight on sortable stacked inlines when all fieldsets are set to collapse. +### What's new in 2.0.8? +- Refactored admin url patterns to be compatible with Django 1.8 or higher. +- Refactored import paths on generics in `sample_project` to be compatible with Django 1.9. +- Fixed typo in documentation. +- Updated unit tests for get_next/previous. ### Future diff --git a/adminsortable/__init__.py b/adminsortable/__init__.py index ff90dbf..1facb45 100644 --- a/adminsortable/__init__.py +++ b/adminsortable/__init__.py @@ -1,4 +1,4 @@ -VERSION = (2, 0, 7) # following PEP 386 +VERSION = (2, 0, 8) # following PEP 386 DEV_N = None diff --git a/adminsortable/admin.py b/adminsortable/admin.py index e6e3927..031ac0b 100755 --- a/adminsortable/admin.py +++ b/adminsortable/admin.py @@ -4,10 +4,12 @@ from django import VERSION from django.conf import settings -if VERSION < (1, 5): - from django.conf.urls.defaults import patterns, url -else: +if VERSION > (1, 7): + from django.conf.urls import url +elif VERSION > (1, 5): from django.conf.urls import patterns, url +else: + from django.conf.urls.defaults import patterns, url from django.contrib.admin import ModelAdmin, TabularInline, StackedInline from django.contrib.admin.options import InlineModelAdmin @@ -80,17 +82,27 @@ class SortableAdmin(SortableAdminBase, ModelAdmin): def get_urls(self): urls = super(SortableAdmin, self).get_urls() - admin_urls = patterns('', - # this ajax view changes the order - url(r'^sorting/do-sorting/(?P\d+)/$', - self.admin_site.admin_view(self.do_sorting_view), - name='admin_do_sorting'), + # this ajax view changes the order + admin_do_sorting_url = url(r'^sorting/do-sorting/(?P\d+)/$', + self.admin_site.admin_view(self.do_sorting_view), + name='admin_do_sorting') + + # this view displays the sortable objects + admin_sort_url = url(r'^sort/$', + self.admin_site.admin_view(self.sort_view), + name='admin_sort') + + if VERSION > (1, 7): + admin_urls = [ + admin_do_sorting_url, + admin_sort_url + ] + else: + admin_urls = patterns('', + admin_do_sorting_url, + admin_sort_url,) - # this view displays the sortable objects - url(r'^sort/$', self.admin_site.admin_view(self.sort_view), - name='admin_sort'), - ) return admin_urls + urls def sort_view(self, request): diff --git a/adminsortable/models.py b/adminsortable/models.py index f1572ad..9157f62 100644 --- a/adminsortable/models.py +++ b/adminsortable/models.py @@ -121,12 +121,12 @@ class SortableMixin(models.Model): def get_next(self, extra_filters={}, filter_on_sortable_fk=True): return self._filter_objects( - {'{0}__gt'.format(self.order_field_name): self._get_order_field_value}, + {'{0}__gt'.format(self.order_field_name): self._get_order_field_value()}, extra_filters, filter_on_sortable_fk) def get_previous(self, extra_filters={}, filter_on_sortable_fk=True): return self._filter_objects( - {'{0}__lt'.format(self.order_field_name): self._get_order_field_value}, + {'{0}__lt'.format(self.order_field_name): self._get_order_field_value()}, extra_filters, filter_on_sortable_fk) diff --git a/sample_project/app/models.py b/sample_project/app/models.py index fb97747..5ef761f 100644 --- a/sample_project/app/models.py +++ b/sample_project/app/models.py @@ -1,4 +1,10 @@ -from django.contrib.contenttypes import generic +from django import VERSION + +if VERSION < (1, 9): + from django.contrib.contenttypes.generic import GenericForeignKey +else: + from django.contrib.contenttypes.fields import GenericForeignKey + from django.contrib.contenttypes.models import ContentType from django.db import models from django.utils.encoding import python_2_unicode_compatible @@ -109,7 +115,7 @@ class GenericNote(SimpleModel, SortableMixin): content_type = models.ForeignKey(ContentType, verbose_name=u"Content type", related_name="generic_notes") object_id = models.PositiveIntegerField(u"Content id") - content_object = generic.GenericForeignKey(ct_field='content_type', + content_object = GenericForeignKey(ct_field='content_type', fk_field='object_id') order = models.PositiveIntegerField(default=0, editable=False)