• 3.2
  • 5.0
  • 6.1
  • Версия документации: 3.1

Примечания к выпуску Django 3.1

4 августа 2020 г.

Добро пожаловать в Джанго 3.1!

Эти примечания к выпуску охватывают новые функции, а также некоторые обратно несовместимые изменения, о которых вам следует знать при обновлении с Django 3.0 или более ранней версии. Мы отменили некоторые функции, цикл устаревания которых достиг конца, и мы начали процесс прекращения поддержки некоторых функций.

См. руководство Upgrading Django to a newer version, если вы обновляете существующий проект.

Совместимость версий Python

Django 3.1 поддерживает Python 3.6, 3.7, 3.8 и 3.9 (начиная с версии 3.1.3). Мы настоятельно рекомендуем и официально поддерживаем только последнюю версию каждой серии.

Что нового в Джанго 3.1

Асинхронные представления и поддержка промежуточного программного обеспечения

Django теперь поддерживает полностью асинхронный путь запроса, в том числе:

Чтобы начать работу с асинхронными представлениями, вам необходимо объявить представление, используя async def:

async def my_view(request):
    await asyncio.sleep(0.5)
    return HttpResponse('Hello, async world!')

Все асинхронные функции поддерживаются независимо от того, работаете ли вы в режиме WSGI или ASGI. Однако использование асинхронного кода в режиме WSGI приведет к снижению производительности. Подробнее об особенностях можно прочитать в документации Асинхронная поддержка.

Вы можете сколько угодно смешивать асинхронные и синхронизирующие представления, промежуточное программное обеспечение и тесты. Django гарантирует, что вы всегда получите правильный контекст выполнения. Мы ожидаем, что в большинстве проектов большая часть представлений будет синхронизирована, и лишь немногие избранные будут работать в асинхронном режиме, но это полностью ваш выбор.

ORM Django, уровень кэша и другие фрагменты кода, выполняющие длительные сетевые вызовы, пока не поддерживают асинхронный доступ. Мы планируем добавить их поддержку в следующих выпусках. Асинхронные представления идеальны, однако, если вы выполняете много вызовов API или HTTP внутри своего представления, теперь вы можете изначально выполнять все эти HTTP-вызовы параллельно, чтобы значительно ускорить выполнение вашего представления.

Асинхронная поддержка должна быть полностью обратно совместима, и мы постарались гарантировать, что она не будет иметь снижения скорости для существующего синхронного кода. Это не должно оказать заметного влияния на существующие проекты Django.

JSONField для всех поддерживаемых баз данных.

Django теперь включает models.JSONField и forms.JSONField, которые можно использовать во всех поддерживаемых базах данных. Оба поля поддерживают использование пользовательских кодировщиков и декодеров JSON. Поле модели поддерживает самоанализ, поиск и преобразование, которые ранее были доступны только для PostgreSQL:

from django.db import models

class ContactInfo(models.Model):
    data = models.JSONField()

ContactInfo.objects.create(data={
    'name': 'John',
    'cities': ['London', 'Cambridge'],
    'pets': {'dogs': ['Rufus', 'Meg']},
})
ContactInfo.objects.filter(
    data__name='John',
    data__pets__has_key='dogs',
    data__cities__contains='London',
).delete()

Если ваш проект использует django.contrib.postgres.fields.JSONField, а также связанное поле формы и преобразования, вам следует настроить использование новых полей, а также сгенерировать и применить миграцию базы данных. На данный момент старые поля и преобразования оставлены как ссылки на новые и устарели с этой версии.

Настройки DEFAULT_HASHING_ALGORITHM

The new DEFAULT_HASHING_ALGORITHM transitional setting allows specifying the default hashing algorithm to use for encoding cookies, password reset tokens in the admin site, user sessions, and signatures created by django.core.signing.Signer and django.core.signing.dumps().

Support for SHA-256 was added in Django 3.1. If you are upgrading multiple instances of the same project to Django 3.1, you should set DEFAULT_HASHING_ALGORITHM to 'sha1' during the transition, in order to allow compatibility with the older versions of Django. Note that this requires Django 3.1.1+. Once the transition to 3.1 is complete you can stop overriding DEFAULT_HASHING_ALGORITHM.

Этот параметр устарел с этого выпуска, поскольку поддержка токенов, файлов cookie, сеансов и подписей, использующих алгоритм SHA-1, будет удалена в Django 4.0.

Минорные изменения

django.contrib.admin

  • Новый django.contrib.admin.EmptyFieldListFilter для ModelAdmin.list_filter позволяет фильтровать пустые значения (пустые строки и значения NULL) в представлении списка изменений администратора.

  • Фильтры на правой боковой панели представления списка изменений администратора теперь содержат ссылку для очистки всех фильтров.

  • У администратора теперь есть боковая панель на больших экранах для упрощения навигации. Он включен по умолчанию, но его можно отключить, используя собственный AdminSite и установив для AdminSite.enable_nav_sidebar значение False.

    Для рендеринга боковой панели требуется доступ к текущему запросу, чтобы установить возможности ролей CSS и ARIA. Для этого необходимо использовать 'django.template.context_processors.request' в опции 'context_processors' в OPTIONS.

  • Изначально пустые лишние строки теперь можно удалить так же, как и динамически создаваемые.

  • XRegExp обновлен с версии 2.0.0 до 3.2.0.

  • jQuery обновлен с версии 3.4.1 до 3.5.1.

  • Библиотека Select2 обновлена ​​с версии 4.0.7 до 4.0.13.

django.contrib.auth

  • Число итераций по умолчанию для хэшера паролей PBKDF2 увеличено со 180 000 до 216 000.

  • Новый параметр PASSWORD_RESET_TIMEOUT позволяет определить количество секунд, в течение которых действительна ссылка для сброса пароля. Это рекомендуется вместо устаревшего параметра PASSWORD_RESET_TIMEOUT_DAYS, который будет удален в Django 4.0.

  • Механизм сброса пароля теперь использует алгоритм хеширования SHA-256. Поддержка токенов, использующих старый алгоритм хеширования, сохраняется до Django 4.0.

  • AbstractBaseUser.get_session_auth_hash() теперь использует алгоритм хеширования SHA-256. Поддержка пользовательских сессий, использующих старый алгоритм хеширования, сохраняется до Django 4.0.

django.contrib.contenttypes

django.contrib.gis

  • relate поиск теперь поддерживается в MariaDB.

  • Добавлено свойство LinearRing.is_counter clock.

  • AsGeoJSON теперь поддерживается в Oracle.

  • Добавлены функции AsWKB и AsWKT.

  • Добавлена ​​поддержка PostGIS 3 и GDAL 3.

django.contrib.humanize

  • intword Фильтр шаблонов теперь поддерживает отрицательные целые числа.

django.contrib.postgres

django.contrib.sessions

  • Параметр SESSION_COOKIE_SAMESITE теперь позволяет значению ``“None“` (строковое) явно указывать, что файл cookie отправляется со всеми односайтовыми и межсайтовыми запросами.

django.contrib.staticfiles

  • Параметр STATICFILES_DIRS теперь поддерживает pathlib.Path.

Кэш

  • Декоратор cache_control() и метод patch_cache_control() теперь поддерживают несколько имен полей в директиве no-cache для заголовка Cache-Control, согласно RFC 7234 Section 5.2.2.2.

  • delete() now returns True if the key was successfully deleted, False otherwise.

CSRF

  • Параметр CSRF_COOKIE_SAMESITE теперь позволяет значению 'None' (строковое) явно указывать, что файл cookie отправляется со всеми односайтовыми и межсайтовыми запросами.

Электронная почта

Отчеты об ошибках

Хранение файлов

  • Метод FileSystemStorage.save() теперь поддерживает pathlib.Path.

  • FileField и ImageField теперь принимают вызов для хранилища. Это позволяет вам изменять используемое хранилище во время выполнения, например, выбирая разные хранилища для разных сред.

Формы

  • ModelChoiceIterator, используемый ModelChoiceField и ModelMultipleChoiceField, теперь использует ModelChoiceIteratorValue, который может использоваться виджетами для доступа к экземплярам модели. Подробности смотрите в Итерационный выбор отношений.

  • django.forms.DateTimeField теперь принимает даты в подмножестве форматов даты и времени ISO 8601, включая необязательный часовой пояс, например 2019-10-10T06:47, 2019-10-10T06:47:23+04:00 или 2019-10-10T06:47:23Z. Часовой пояс всегда будет сохраняться, если он указан, а дата и время с учетом часового пояса будут возвращены, даже если USE_TZ имеет значение False.

    Кроме того, DateTimeField теперь использует DATE_INPUT_FORMATS в дополнение к DATETIME_INPUT_FORMATS при преобразовании ввода поля в значение datetime.

  • MultiWidget.widgets теперь принимает словарь, который позволяет настраивать атрибуты name подвиджета.

  • Новое свойство BoundField.widget_type можно использовать для динамической настройки рендеринга формы в зависимости от типа виджета.

Интернационализация

  • Параметр LANGUAGE_COOKIE_SAMESITE теперь позволяет значению ``“None“` (строковое) явно указывать, что файл cookie отправляется со всеми односайтовыми и межсайтовыми запросами.

  • Добавлена ​​поддержка и переводы на алжирский арабский, игбо, кыргызский, таджикский и туркменский языки.

Команды управления

  • Новая опция check --database позволяет указать псевдонимы базы данных для запуска системных проверок базы данных. Ранее эти проверки были включены для всех настроенных БАЗ ДАННЫХ путем передачи тега базы данных в команду.

  • Новая опция migrate --check позволяет команде завершить работу с ненулевым статусом при обнаружении непримененных миграций.

  • Новый аргумент returncode для CommandError позволяет настраивать статус завершения для команд управления.

  • Новая опция dbshell -- ARGUMENTS позволяет передавать дополнительные аргументы клиенту командной строки для базы данных.

  • Команды flush и sqlflush теперь включают SQL для сброса последовательностей в SQLite.

Модели

  • Новая функция ExtractIsoWeekDay извлекает дни недели ISO-8601 из DateField и DateTimeField, а новый поиск iso_week_day позволяет делать запросы по ISO-8601 день недели.

  • QuerySet.explain() теперь поддерживает:

    • Формат TREE в MySQL 8.0.16+,

    • Опция анализ в MySQL 8.0.18+ и MariaDB.

  • Добавлен PositiveBigIntegerField, который действует очень похоже на PositiveIntegerField, за исключением того, что он допускает значения только ниже определенного (зависящего от базы данных) предела. Значения от 0 до 9223372036854775807 безопасны во всех базах данных, поддерживаемых Django.

  • Новая опция RESTRICT для аргумента on_delete для ForeignKey и OneToOneField эмулирует поведение SQL-ограничения ON DELETE RESTRICT.

  • CheckConstraint.check now supports boolean expressions.

  • Методы RelatedManager.add(), create() и set() теперь принимают вызываемые объекты в качестве значений в аргументе through_defaults.

  • Новый параметр is_dst файла QuerySet.datetimes() определяет обработку несуществующих и неоднозначных значений даты и времени.

  • Новый метод выражения F bitxor() позволяет побитовую операцию XOR.

  • QuerySet.bulk_create() теперь устанавливает первичный ключ для объектов при использовании MariaDB 10.5+.

  • Метод DatabaseOperations.sql_flush() теперь генерирует более эффективный SQL в MySQL, используя DELETE вместо операторов TRUNCATE для таблиц, которые не требуют сброса последовательностей.

  • Функции SQLite теперь помечаются как детерминированные в Python 3.8+. Это позволяет использовать их в проверочных ограничениях и частичных индексах.

  • Новый атрибут UniqueConstraint.deferrable позволяет создавать отложенные уникальные ограничения.

Пагинация

  • Paginator теперь можно перебирать для получения страниц.

Запросы и ответы

  • Если ALLOWED_HOSTS пуст и DEBUG=True, субдомены localhost теперь разрешены в заголовке Host, например static.localhost.

  • HttpResponse.set_cookie() и HttpResponse.set_signed_cookie() теперь позволяют использовать samesite='None' (строку), чтобы явно указать, что файл cookie отправляется со всеми односайтовыми и межсайтовыми запросами.

  • Новый метод HttpRequest.accepts() возвращает, принимает ли запрос данный тип MIME в соответствии с HTTP-заголовком Accept.

Безопасность

  • Параметр SECURE_REFERRER_POLICY теперь по умолчанию имеет значение 'same-origin'. При такой настройке SecurityMiddleware устанавливает для заголовка Политика рефералов значение same-origin во всех ответах, в которых его еще нет. Это предотвращает отправку заголовка «Referer» в другие источники. Если вам нужно предыдущее поведение, явно установите для SECURE_REFERRER_POLICY значение None.

  • Алгоритм по умолчанию для django.core.signing.Signer, django.core.signing.loads() и django.core.signing.dumps() изменен на SHA-256. Поддержка подписей, созданных с помощью старого алгоритма SHA-1, сохраняется до Django 4.0.

    Кроме того, новый параметр algorithm Signer позволяет настраивать алгоритм хеширования.

Шаблоны

  • Переименованные теги шаблонов translate и blocktranslate вводятся для интернационализации в коде шаблона. Старые псевдонимы тегов шаблонов trans и blocktrans продолжают работать и будут сохранены в обозримом будущем.

  • Тег шаблона include теперь принимает итерации имен шаблонов.

Тесты

  • SimpleTestCase теперь реализует метод debug(), позволяющий запускать тест без сбора результатов и перехвата исключений. Это можно использовать для поддержки запуска тестов под отладчиком.

  • Новая настройка тестовой базы данных MIGRATE <TEST_MIGRATE> позволяет отключить миграцию во время создания тестовой базы данных.

  • Django test runner now supports a test --buffer option to discard output for passing tests.

  • DiscoverRunner теперь пропускает запуск системных проверок баз данных, на которые не ссылаются тесты.

  • Разбор TransactionTestCase в MySQL теперь происходит быстрее благодаря улучшениям команды flush. В качестве побочного эффекта последний больше не сбрасывает автоматически последовательности при демонтаже. Включите TransactionTestCase.reset_sequences, если ваши тесты требуют этой функции.

URL-адреса

  • Конвертеры путей теперь могут вызывать ValueError в to_url(), чтобы указать на отсутствие совпадения при реверсировании URL-адресов.

Утилиты

  • filepath_to_uri() теперь поддерживает pathlib.Path.

  • parse_duration() теперь поддерживает разделители-запятые для десятичных дробей в формате ISO 8601.

  • parse_datetime(), parse_duration() и parse_time() теперь поддерживают разделители-запятые для миллисекунд.

Разнообразный

  • Серверная часть SQLite теперь поддерживает pathlib.Path для настройки NAME.

  • Файл settings.py, созданный командой startproject, теперь использует pathlib.Path вместо os.path для построения путей к файловой системе.

  • Параметр TIME_ZONE теперь разрешен в базах данных, поддерживающих часовые пояса.

Обратная несовместимость изменений в версии 3.1

Серверный API базы данных

В этом разделе описаны изменения, которые могут потребоваться в сторонних базах данных.

  • DatabaseOperations.fetch_returned_insert_columns() теперь требует дополнительного аргумента returning_params.

  • Свойство connection.timezone теперь имеет значение 'UTC' по умолчанию или значение TIME_ZONE, когда :setting:USE_TZ` имеет значение ``True в базах данных, поддерживающих часовые пояса. Раньше в базах данных, поддерживающих часовые пояса, это было «Нет».

  • Свойство connection._nodb_connection изменено на метод connection._nodb_cursor() и теперь возвращает контекстный менеджер, который создает курсор и автоматически закрывает курсор и соединение при выходе из оператора with.

  • DatabaseClient.runshell() теперь требует дополнительного аргумента parameters в качестве списка дополнительных аргументов для передачи клиенту командной строки.

  • Позиционный аргумент sequences в DatabaseOperations.sql_flush() заменяется логическим аргументом reset_sequences, содержащим только ключевые слова. Если True, последовательности усеченных таблиц будут сброшены.

  • Аргумент allow_cascade в DatabaseOperations.sql_flush() теперь является аргументом, содержащим только ключевые слова.

  • Позиционный аргумент using в DatabaseOperations.execute_sql_flush() удален. Теперь метод использует базу данных вызываемого экземпляра.

  • Сторонние базы данных должны реализовать поддержку JSONField или установить для DatabaseFeatures.supports_json_field значение False. Если хранение примитивов не поддерживается, установите для DatabaseFeatures.supports_primitives_in_json_field значение False. Если для JSON существует настоящий тип данных, установите для DatabaseFeatures.has_native_json_field значение True. Если jsonfield.contains и jsonfield.contained_by не поддерживаются, установите для DatabaseFeatures.supports_json_field_contains значение False.

  • Сторонние базы данных должны реализовать интроспекцию для JSONField или установить для can_introspect_json_field значение False.

Прекращена поддержка MariaDB 10.1.

Восходящая поддержка MariaDB 10.1 заканчивается в октябре 2020 года. Django 3.1 поддерживает MariaDB 10.2 и выше.

contrib.admin поддержка браузера

Администратор больше не поддерживает устаревший браузер Internet Explorer. См. Часто задаваемые вопросы для администраторов для получения подробной информации о поддерживаемых браузерах.

AbstractUser.first_name max_length увеличено до 150

Включена миграция для django.contrib.auth.models.User.first_name. Если у вас есть пользовательская модель, унаследованная от «AbstractUser», вам необходимо сгенерировать и применить миграцию базы данных для вашей пользовательской модели.

Если вы хотите сохранить ограничение в 30 символов для имен, используйте специальную форму:

from django import forms
from django.contrib.auth.forms import UserChangeForm

class MyUserChangeForm(UserChangeForm):
    first_name = forms.CharField(max_length=30, required=False)

Если вы хотите сохранить это ограничение в администраторе при редактировании пользователей, установите UserAdmin.form для использования этой формы:

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):
    form = MyUserChangeForm

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

Разнообразный

  • Ключи кэша, используемые cache и генерируемые make_template_fragment_key(), отличаются от ключей, генерируемых более старыми версиями Django. После обновления до Django 3.1 первый запрос к любому ранее кэшированному фрагменту шаблона будет промахом в кэше.

  • Логика решения о возврате резервного перенаправления или HTTP-ответа 204 из представления set_language() теперь основана на HTTP-заголовке Accept вместо наличия HTTP-заголовка X-Requested-With.

  • Импорт совместимости django.core.Exceptions.EmptyResultSet в django.db.models.query, django.db.models.sql и django.db.models.sql.datastructures удален.

  • Импорт совместимости django.core.Exceptions.FieldDoesNotExist в django.db.models.fields удален.

  • Импорт совместимости django.forms.utils.pretty_name() и django.forms.boundfield.BoundField в django.forms.forms удален.

  • Импорт совместимости для Context, ContextPopException и RequestContext в django.template.base удален.

  • Импорт совместимости django.contrib.admin.helpers.ACTION_CHECKBOX_NAME в django.contrib.admin удален.

  • Настройки STATIC_URL и MEDIA_URL, для которых заданы относительные пути, теперь имеют префикс предоставленного сервером значения SCRIPT_NAME (или /, если он не установлен). Это изменение не должно повлиять на настройки действительных URL-адресов или абсолютных путей.

  • ConditionalGetMiddleware больше не добавляет заголовок ETag к ответам с пустым content.

  • Декоратор django.utils.decorators.classproperty() стал общедоступным и перемещен в django.utils.functional.classproperty().

  • Фильтр шаблонов floatformat теперь выводит (положительный) 0 для отрицательных чисел, которые округляются до нуля.

  • Meta.ordering и Meta.unique_together параметры моделей в модулях django.contrib, которые раньше были кортежами, теперь представляют собой списки.

  • Виджет календаря администратора теперь обрабатывает двузначные годы в соответствии со спецификацией открытой группы, т. е. значения от 69 до 99 сопоставляются с предыдущим веком, а значения между 0 и 68 сопоставляются с текущим веком.

  • Форматы только даты удалены из списка по умолчанию для DATETIME_INPUT_FORMATS.

  • Виджет FileInput больше не отображается с HTML-атрибутом required при наличии исходных данных.

  • Недокументированный класс django.views.debug.ExceptionReporterFilter удален. Согласно документации custom-error-reports, классы, которые будут использоваться с DEFAULT_EXCEPTION_REPORTER_FILTER, должны наследовать от django.views.debug.SafeExceptionReporterFilter.

  • Тайм-аут кэша, установленный декоратором cache_page(), теперь имеет приоритет над директивой max-age из заголовка Cache-Control.

  • Предоставление нелокального удаленного поля в аргументе ForeignKey.to_field теперь вызывает FieldError.

  • SECURE_REFERRER_POLICY теперь по умолчанию имеет значение 'same-origin'. Дополнительную информацию см. в разделе Что нового Безопасность выше.

  • Команда управления check теперь запускает системную проверку базы данных только для псевдонимов базы данных, указанных с помощью опции check --database.

  • migrate команда управления теперь запускает систему база данных и проверяет только базу данных для миграции.

  • Классы CSS администратора row1 и row2 удалены в пользу псевдоклассов :nth-child(odd) и :nth-child(even).

  • Функция make_password() теперь требует, чтобы ее аргумент был строкой или байтами. Другие типы должны быть явно приведены к одному из них.

  • Недокументированный параметр version для функции AsKML удален.

  • Сериализаторы JSON и YAML, используемые dumpdata, теперь по умолчанию выгружают все данные в формате Unicode. Если вам нужно предыдущее поведение, передайте ensure_ascii=True сериализатору JSON или allow_unicode=False сериализатору YAML.

  • Автоперезагрузка больше не отслеживает изменения во встроенных файлах перевода Django.

  • Минимальная поддерживаемая версия mysqlclient увеличена с 1.3.13 до 1.4.0.

  • Недокументированные django.contrib.postgres.forms.InvalidJSONInput и django.contrib.postgres.forms.JSONString перемещены в django.forms.fields.

  • Недокументированный класс django.contrib.postgres.fields.jsonb.JsonAdapter удален.

  • Тег {% localize off %} и фильтр unlocalize больше не учитывают настройку DECIMAL_SEPARATOR.

  • Минимальная поддерживаемая версия asgiref увеличена с 3.2 до 3.2.10.

  • Класс Media теперь отображает теги <script> без атрибута type в соответствии с ``рекомендациями WHATWG <https://html.spec.whatwg.org/multipage/scripting.html#the-script-element>`_.

  • ModelChoiceIterator, используемый ModelChoiceField и ModelMultipleChoiceField, теперь дает варианты из двух кортежей, содержащие экземпляры ModelChoiceIteratorValue в качестве первого элемент value в каждом выборе. В большинстве случаев это прозрачное проксирование, но если вам нужно само значение поля, используйте вместо него атрибут ModelChoiceIteratorValue.value.

Функции, устаревшие в версии 3.1

PostgreSQL JSONField

django.contrib.postgres.fields.JSONField и django.contrib.postgres.forms.JSONField устарели в пользу models.JSONField и forms.JSONField.

Недокументированные django.contrib.postgres.fields.jsonb.KeyTransform и django.contrib.postgres.fields.jsonb.KeyTextTransform также устарели в пользу преобразований в django.db.models.fields.json.

Новые JSONField, KeyTransform и KeyTextTransform можно использовать на всех поддерживаемых базах данных.

Разнообразный

  • Параметр PASSWORD_RESET_TIMEOUT_DAYS устарел в пользу PASSWORD_RESET_TIMEOUT.

  • Недокументированное использование поиска isnull с нелогическими значениями в правой части устарело, вместо этого используйте True или False.

  • Едва документированный класс исключений django.db.models.query_utils.InvalidQuery устарел в пользу FieldDoesNotExist и FieldError.

  • Точка входа django-admin.py устарела в пользу django-admin.

  • Метод HttpRequest.is_ajax() устарел, поскольку он основан на специфичном для jQuery способе обозначения вызовов AJAX, в то время как в настоящее время используется JavaScript Fetch API. В зависимости от вашего варианта использования вы можете либо написать свой собственный метод обнаружения AJAX, либо использовать новый метод HttpRequest.accepts(), если ваш код зависит от HTTP-заголовка клиента Accept.

    Если вы пишете свой собственный метод обнаружения AJAX, request.is_ajax() может быть воспроизведен точно так же, как request.headers.get('x-requested-with') == 'XMLHttpRequest'.

  • Передача None в качестве первого аргумента в django.utils.deprecation.MiddlewareMixin.__init__() не рекомендуется.

  • Формат кодирования значений cookie, используемый CookieStorage, отличается от формата, созданного более старыми версиями Django. Поддержка старого формата сохраняется до Django 4.0.

  • Формат кодирования сеансов отличается от формата, созданного в старых версиях Django. Поддержка старого формата сохраняется до Django 4.0.

  • Чисто документальный аргумент «providing_args» для Signal устарел. Если вы полагаетесь на этот аргумент в качестве документации, вы можете переместить текст в комментарий к коду или строку документации.

  • Вызов django.utils.crypto.get_random_string() без аргумента length считается устаревшим.

  • Сообщение list для ModelMultipleChoiceField устарело в пользу invalid_list.

  • Передача необработанных псевдонимов столбцов в QuerySet.order_by() устарела. Того же результата можно добиться, передав вместо этого псевдонимы в RawSQL заранее.

  • The NullBooleanField model field is deprecated in favor of BooleanField(null=True).

  • django.conf.urls.url() псевдоним django.urls.re_path() устарел.

  • Теги шаблонов {% ifequal %} и {% ifnotequal %} устарели в пользу {% if %}. {% if %} охватывает все варианты использования, но если вам нужно продолжать использовать эти теги, их можно извлечь из Django в модуль и включить в качестве встроенного тега в параметр 'builtins' в OPTIONS.

  • Переходная настройка DEFAULT_HASHING_ALGORITHM устарела.

Функции удалены в версии 3.1

Эти функции достигли конца цикла устаревания и удалены в Django 3.1.

См. Функции, устаревшие в версии 2.2 для получения подробной информации об этих изменениях, в том числе о том, как прекратить использование этих функций.

  • django.utils.timezone.FixedOffset удален.

  • django.core.paginator.QuerySetPaginator удален.

  • Meta.ordering модели не влияет на запросы GROUP BY.

  • django.contrib.postgres.fields.FloatRangeField и django.contrib.postgres.forms.FloatRangeField удалены.

  • Параметр FILE_CHARSET удален.

  • django.contrib.staticfiles.storage.CachedStaticFilesStorage удален.

  • Метод RemoteUserBackend.configure_user() требует запроса в качестве первого позиционного аргумента.

  • Поддержка SimpleTestCase.allow_database_queries и TransactionTestCase.multi_db удалена.

Back to Top