Миграция Django 2.0 нарушает модульный тест django-autocomplete-light с TypeError

Я пытаюсь перейти на Django 2.0 с 1.11, но некоторые модульные тесты, связанные с django-autocomplete-light (3.5.1), начали завершаться с TypeError после вызова self.client.get() из класса TestCase. (__init__() takes 1 positional argument but 2 were given)

В некоторых найденных мною предложениях говорилось, что проблема может заключаться в отсутствии переменной as_view() в представлении URL, но она там уже есть. Я также изменил переменную MIDDLEWARE_CLASSES на MIDDLEWARE в настройках.

test.py

from django.urls import reverse
from django.test import TestCase
from django.contrib.auth.models import User

class AutocompleteTestCase(TestCase):

    def setUp(self):
        self.admin_cred = {
            'username': 'test',
            'password': 'test',
        }
        self.user = User.objects.create_superuser('test', 'test@test.com', self.admin_cred['password'])

    def query_autocomplete_view(self, url_name, query=None):
        data = {}
        if query:
            data['q'] = query
        self.client.force_login(self.user)
        response_json = self.client.get(reverse(url_name), data=data).json()
        return response_json.get('results')

Ошибка Traceback

Traceback (most recent call last):
  File "/home/circleci/project/test/apps/dataadmin/tests/test_autocomplete_views.py", line 131, in test_dataadmin_field_autocomplete
    results = self.query_autocomplete_view('admin:dataadmin_autocomplete_dataadminfield', query='test')
  File "/home/circleci/project/dataadmin/common/test_utils.py", line 23, in query_autocomplete_view
    response_json = self.client.get(reverse(url_name), data=data).json()
  File "/home/circleci/project/venv/lib/python3.6/site-packages/django/test/client.py", line 517, in get
    response = super().get(path, data=data, secure=secure, **extra)
  File "/home/circleci/project/venv/lib/python3.6/site-packages/django/test/client.py", line 332, in get
    return self.generic('GET', path, secure=secure, **r)
  File "/home/circleci/project/venv/lib/python3.6/site-packages/django/test/client.py", line 404, in generic
    return self.request(**r)
  File "/home/circleci/project/venv/lib/python3.6/site-packages/django/test/client.py", line 467, in request
    response = self.handler(environ)
  File "/home/circleci/project/venv/lib/python3.6/site-packages/django/test/client.py", line 125, in __call__
    self.load_middleware()
  File "/home/circleci/project/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 39, in load_middleware
    mw_instance = middleware(handler)
TypeError: __init__() takes 1 positional argument but 2 were given

Похоже, что ошибка возникает после загрузки промежуточного ПО, но я не смог определить никаких проблем с установкой промежуточного ПО.

settings.py

MIDDLEWARE = (
    'django_prometheus.middleware.PrometheusBeforeMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'allow_cidr.middleware.AllowCIDRMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django_auditor.middleware.AuditorMiddleware',
    'django_prometheus.middleware.PrometheusAfterMiddleware',
)

AdminApp использует django.contrib.admin.AdminSite. Она настраивает базовое приложение администратора. Функция возвращает список шаблонов URL.

admin.py

class DataAdminApp(AdminApp):

    def get_urls(self):
        return [
            url(
                r'^dataadmin/autocomplete/dataadminfield/$',
                self.admin_view(DataAdminFieldAutocomplete.as_view()),
                name="dataadmin_autocomplete_dataadminfield"
            )
        ]
Вернуться на верх