From 51079fdbfb49df772b20262fff9bda2a327ac800 Mon Sep 17 00:00:00 2001 From: David Krauth Date: Thu, 28 Jun 2018 16:49:32 -0400 Subject: [PATCH 1/2] a few tweaks for better django 1.11 support --- CHANGELOG.rst | 4 ++++ Makefile | 4 ++-- README.md | 2 +- locking/models.py | 5 +++-- setup.py | 4 ++-- tests/settings.py | 3 ++- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6ec9163..b08ac52 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,10 @@ Changelog ========= +**1.5 (June 28, 2018)** + +* Improved support for Django 1.11, with initial support for 2.0 + **1.4 (June 8, 2017)** * New: localization for messages in admin. Russian locale available diff --git a/Makefile b/Makefile index 6f563f4..2d46ec4 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,3 @@ test: - DJANGO_SETTINGS_MODULE=locking.tests.settings django-admin.py collectstatic --link --noinput - DJANGO_SETTINGS_MODULE=locking.tests.settings django-admin.py test locking + DJANGO_SETTINGS_MODULE=tests.settings django-admin.py collectstatic --link --noinput + DJANGO_SETTINGS_MODULE=tests.settings django-admin.py test tests diff --git a/README.md b/README.md index 7ba7b07..59a2da2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Prevents users from overwriting each others changes in Django. Django Admin Locking is tested in the following environments * Python (2.7, 3.4) -* Django (1.8, 1.9, 1.10) +* Django (1.8, 1.9, 1.10, 1.11) ## Installation diff --git a/locking/models.py b/locking/models.py index 09102a2..3679cf6 100644 --- a/locking/models.py +++ b/locking/models.py @@ -80,9 +80,10 @@ def get_queryset(self): class Lock(models.Model): id = models.CharField(max_length=15, primary_key=True) - locked_by = models.ForeignKey(getattr(settings, 'AUTH_USER_MODEL', 'auth.User')) + locked_by = models.ForeignKey(getattr(settings, 'AUTH_USER_MODEL', 'auth.User'), + on_delete=models.CASCADE) date_expires = models.DateTimeField() - content_type = models.ForeignKey(ContentType) + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') diff --git a/setup.py b/setup.py index bd27c31..c8363a8 100644 --- a/setup.py +++ b/setup.py @@ -2,9 +2,9 @@ setup( name='django-admin-locking', - version='1.4', + version='1.5', url='https://github.com/joshmaker/django-admin-locking/', - download_url='https://github.com/joshmaker/django-admin-locking/tarball/v1.4', + download_url='https://github.com/joshmaker/django-admin-locking/tarball/v1.5', license='BSD', description='Prevents users from overwriting each others changes in Django.', author='Josh West', diff --git a/tests/settings.py b/tests/settings.py index 58dec0c..12ec004 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -39,7 +39,7 @@ MEDIA_URL = '/media/' # Avoids https://code.djangoproject.com/ticket/21451 -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', @@ -47,6 +47,7 @@ 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) +MIDDLEWARE_CLASSES = MIDDLEWARE ROOT_URLCONF = 'tests.urls' From c974670483c7e43b4afa19d8b300d40961dc4654 Mon Sep 17 00:00:00 2001 From: obswork Date: Mon, 1 Oct 2018 13:18:52 -0400 Subject: [PATCH 2/2] Fix undefined user errors On occasion, the user will not be defined yet in the context of the browser environment when the server locking ping occurs and is resolved. In this instance, we suspend the update until the next successful ping. refs: DEV-23982 --- locking/static/locking/js/locking.admin.js | 42 +++++++++++----------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/locking/static/locking/js/locking.admin.js b/locking/static/locking/js/locking.admin.js index 02c1b1e..6949804 100644 --- a/locking/static/locking/js/locking.admin.js +++ b/locking/static/locking/js/locking.admin.js @@ -26,27 +26,29 @@ $('.locking-status.locked').removeClass('locked').removeAttr('title'); for (var i = 0; i < data.length; i++) { user = data[i]['locked_by']; - if (user['username'] === self.currentUser) { - lockedMessage = self.lockedByMeText; - lockedClass = "editing"; - } else { - name = user['first_name'] + ' ' + user['last_name']; - if (name === ' ') { - name = user['username']; + if (user) { + if (user['username'] === self.currentUser) { + lockedMessage = self.lockedByMeText; + lockedClass = "editing"; + } else { + name = user['first_name'] + ' ' + user['last_name']; + if (name === ' ') { + name = user['username']; + } + lockedMessage = self.lockedByUserText + ' ' + name; + if (user['email']){ + lockedMessage += ' (' + user['email'] + ')'; + } + lockedClass = "locked"; } - lockedMessage = self.lockedByUserText + ' ' + name; - if (user['email']){ - lockedMessage += ' (' + user['email'] + ')'; - } - lockedClass = "locked"; - } - $('#locking-' + data[i]['object_id']) - .removeClass('locked editing') - .addClass(lockedClass) - .attr('title', lockedMessage) - .click(function () { - locking.cookies.set(self.cookieName, '1', 60 * 1000); - }); + $('#locking-' + data[i]['object_id']) + .removeClass('locked editing') + .addClass(lockedClass) + .attr('title', lockedMessage) + .click(function () { + locking.cookies.set(self.cookieName, '1', 60 * 1000); + }); + }; } }}); };