diff --git a/.travis.yml b/.travis.yml index aa087093b..99cf4fcff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,10 @@ matrix: sudo: true - env: TOXENV=py35-dj20-sqlite-noelasticsearch python: 3.5 + - env: TOXENV=py35-dj21-sqlite-noelasticsearch + python: 3.5 + - env: TOXENV=py35-dj21-mysql-noelasticsearch + python: 3.5 - env: TOXENV=py36-dj111-sqlite-noelasticsearch python: 3.6 - env: TOXENV=py36-dj111-postgres-noelasticsearch @@ -37,33 +41,52 @@ matrix: python: 3.6 - env: TOXENV=py36-dj20-postgres-noelasticsearch python: 3.6 + - env: TOXENV=py36-dj21-postgres-noelasticsearch + python: 3.6 - env: TOXENV=py36-dj111-postgres-elasticsearch2 INSTALL_ELASTICSEARCH2=yes python: 3.6 sudo: true - env: TOXENV=py36-dj20-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes python: 3.6 sudo: true + - env: TOXENV=py36-dj21-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes + python: 3.6 + sudo: true - env: TOXENV=py36-dj111-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes python: 3.6 sudo: true - env: TOXENV=py36-dj20-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes python: 3.6 sudo: true + - env: TOXENV=py36-dj21-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes + python: 3.6 + sudo: true - env: TOXENV=py36-dj111-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes python: 3.6 sudo: true - env: TOXENV=py36-dj20-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes python: 3.6 sudo: true + - env: TOXENV=py36-dj21-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes + python: 3.6 + sudo: true allow_failures: # Ignore failures on Elasticsearch tests because ES on Travis is intermittently flaky - env: TOXENV=py35-dj111-postgres-elasticsearch2 INSTALL_ELASTICSEARCH2=yes - env: TOXENV=py36-dj111-postgres-elasticsearch2 INSTALL_ELASTICSEARCH2=yes - env: TOXENV=py36-dj20-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes + - env: TOXENV=py36-dj21-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes - env: TOXENV=py36-dj111-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes - env: TOXENV=py36-dj20-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes + - env: TOXENV=py36-dj21-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes - env: TOXENV=py36-dj111-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes - env: TOXENV=py36-dj20-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes + - env: TOXENV=py36-dj21-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes + # Django 2.1 support is in progress + - env: TOXENV=py35-dj21-sqlite-noelasticsearch + - env: TOXENV=py35-dj21-mysql-noelasticsearch + - env: TOXENV=py36-dj21-postgres-noelasticsearch + # Services services: diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 8728ec823..d9efd5971 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -311,6 +311,7 @@ Contributors * Andrew Crewdson * Aram Dulyan * Kevin Howbrook +* Ryan Verner Translators =========== diff --git a/tox.ini b/tox.ini index 8131d5dd8..c4d16ddd8 100644 --- a/tox.ini +++ b/tox.ini @@ -43,6 +43,8 @@ deps = dj111: Django>=1.11b1,<2.0 dj111-mssql: django-pyodbc-azure==1.11.0.0 dj20: Django>=2.0,<2.1 + dj21: git+https://github.com/django/django.git@2.1rc1#egg=Django + postgres: psycopg2>=2.6 mysql: mysqlclient==1.3.6 elasticsearch2: elasticsearch>=2,<3 diff --git a/wagtail/contrib/modeladmin/views.py b/wagtail/contrib/modeladmin/views.py index b3a310837..614f60aa5 100644 --- a/wagtail/contrib/modeladmin/views.py +++ b/wagtail/contrib/modeladmin/views.py @@ -15,7 +15,6 @@ from django.db import models from django.db.models.constants import LOOKUP_SEP from django.db.models.fields import FieldDoesNotExist from django.db.models.fields.related import ForeignObjectRel, ManyToManyField -from django.db.models.sql.constants import QUERY_TERMS from django.shortcuts import get_object_or_404, redirect from django.template.defaultfilters import filesizeformat from django.utils.decorators import method_decorator @@ -34,6 +33,18 @@ from wagtail.admin.edit_handlers import ObjectList, extract_panel_definitions_fr from .forms import ParentChooserForm +try: + from django.db.models.sql.constants import QUERY_TERMS +except ImportError: + # Django 2.1+ does not have QUERY_TERMS anymore + QUERY_TERMS = { + 'contains', 'day', 'endswith', 'exact', 'gt', 'gte', 'hour', + 'icontains', 'iendswith', 'iexact', 'in', 'iregex', 'isnull', + 'istartswith', 'lt', 'lte', 'minute', 'month', 'range', 'regex', + 'search', 'second', 'startswith', 'week_day', 'year', + } + + class WMABaseView(TemplateView): """ Groups together common functionality for all app views. diff --git a/wagtail/core/urls.py b/wagtail/core/urls.py index 0105fdf36..607945f08 100644 --- a/wagtail/core/urls.py +++ b/wagtail/core/urls.py @@ -25,7 +25,7 @@ WAGTAIL_FRONTEND_LOGIN_TEMPLATE = getattr( urlpatterns = [ url(r'^_util/authenticate_with_password/(\d+)/(\d+)/$', views.authenticate_with_password, name='wagtailcore_authenticate_with_password'), - url(r'^_util/login/$', auth_views.login, {'template_name': WAGTAIL_FRONTEND_LOGIN_TEMPLATE}, + url(r'^_util/login/$', auth_views.LoginView.as_view(template_name=WAGTAIL_FRONTEND_LOGIN_TEMPLATE), name='wagtailcore_login'), # Front-end page views are handled through Wagtail's core.views.serve