diff --git a/README.rst b/README.rst index 8695763..d7efff8 100644 --- a/README.rst +++ b/README.rst @@ -6,7 +6,7 @@ Django bulk admin enables you to bulk add, bulk edit, bulk upload and bulk selec View the screenshots below to get an idea of how django bulk admin does look like. -Requires Django >= 1.7. +Requires Django >= 1.11. =========== diff --git a/bulk_admin/admin.py b/bulk_admin/admin.py index 032e017..84573c5 100644 --- a/bulk_admin/admin.py +++ b/bulk_admin/admin.py @@ -9,13 +9,13 @@ from django.contrib.admin.templatetags.admin_urls import add_preserved_filters from django.contrib.admin.utils import NestedObjects, flatten_fieldsets from django.core.exceptions import PermissionDenied, ValidationError -from django.core.urlresolvers import reverse from django.db import router, transaction from django.forms.formsets import DELETION_FIELD_NAME, INITIAL_FORM_COUNT, TOTAL_FORM_COUNT, ManagementForm from django.forms.models import modelform_defines_fields, modelformset_factory, BaseModelFormSet from django.forms.utils import ErrorList from django.http import HttpResponseRedirect from django.template.response import SimpleTemplateResponse +from django.urls import reverse from django.utils import six from django.utils.encoding import force_text from django.utils.text import get_text_list diff --git a/bulk_admin/static/bulk_admin/js/bulk.js b/bulk_admin/static/bulk_admin/js/bulk.js index d5de727..d89c325 100644 --- a/bulk_admin/static/bulk_admin/js/bulk.js +++ b/bulk_admin/static/bulk_admin/js/bulk.js @@ -71,6 +71,7 @@ } $totalFormCountInput.attr('value', this.files.length); + $form.appendTo($('body')); $form.submit(); submitted = true; diff --git a/example_project/migrations/0001_initial.py b/example_project/migrations/0001_initial.py new file mode 100644 index 0000000..614b9fa --- /dev/null +++ b/example_project/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-07-24 20:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Image', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, unique=True)), + ('data', models.FileField(blank=True, null=True, upload_to='')), + ], + ), + migrations.CreateModel( + name='Project', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, unique=True)), + ('images', models.ManyToManyField(blank=True, to='example_project.Image')), + ], + ), + ] diff --git a/example_project/migrations/__init__.py b/example_project/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/example_project/settings.py b/example_project/settings.py index f0140d1..c0a2258 100644 --- a/example_project/settings.py +++ b/example_project/settings.py @@ -45,12 +45,11 @@ 'example_project', ) -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) diff --git a/example_project/tests.py b/example_project/tests.py index 59c9312..3e14f61 100644 --- a/example_project/tests.py +++ b/example_project/tests.py @@ -3,7 +3,7 @@ from django.test import TestCase from django.contrib.admin.sites import site as admin_site from django.contrib.auth.models import Permission, User -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import six from io import BytesIO diff --git a/example_project/urls.py b/example_project/urls.py index 89b573e..bbc511a 100644 --- a/example_project/urls.py +++ b/example_project/urls.py @@ -15,9 +15,9 @@ 1. Add an import: from blog import urls as blog_urls 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) """ -from django.conf.urls import include, url +from django.conf.urls import url from django.contrib import admin urlpatterns = [ - url(r'^admin/', include(admin.site.urls)), + url(r'^admin/', admin.site.urls), ] diff --git a/requirements.txt b/requirements.txt index 1df7250..d707b50 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -Django==1.8.4 +Django==2.0 tox==2.1.1 diff --git a/setup.py b/setup.py index 07b7793..fc8b94c 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ author='Ruben Grill', author_email='ruben.grill@gmail.com', install_requires=[ - 'Django>=1.7', + 'Django>=1.11', ], classifiers=[ 'Environment :: Web Environment', @@ -31,9 +31,10 @@ 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.2', - 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Topic :: Software Development :: Libraries :: Python Modules', ], ) diff --git a/tox.ini b/tox.ini index 63e9f97..f45f4a9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,15 +1,14 @@ [tox] envlist = - py{27,32,33,34}-django{17,18} + py2-django1_11, + py3-django{1_11,2_0} [testenv] basepython = - py27: python2.7 - py32: python3.2 - py33: python3.3 - py34: python3.4 + py2: python2 + py3: python3 commands = make test deps = - django17: Django>=1.7,<1.8 - django18: Django>=1.8,<1.9 + django1_11: Django>=1.11,<1.12 + django2_0: Django>=2.0,<2.1 whitelist_externals = make