Примечания к выпуску Django 4.0¶
7 декабря 2021 года
Добро пожаловать в Django 4.0!
Эти заметки о выпуске охватывают new features, а также некоторые backwards incompatible changes, о которых вы должны знать при переходе с Django 3.2 или более ранней версии. Мы begun the deprecation process for some features.
См. руководство Как обновить Django до более новой версии, если вы обновляете существующий проект.
Совместимость с Python¶
Django 4.0 поддерживает Python 3.8, 3.9 и 3.10. Мы настоятельно рекомендуем и официально поддерживаем только последний выпуск каждой серии.
Серия Django 3.2.x является последней, поддерживающей Python 3.6 и 3.7.
Что нового в Django 4.0¶
zoneinfo
реализация часового пояса по умолчанию¶
zoneinfo
из стандартной библиотеки Python теперь является реализацией часового пояса по умолчанию в Django.
Это следующий шаг в переходе от использования pytz
к использованию zoneinfo
. В Django 3.2 разрешено использование не``pytz`` часовых поясов. Django 4.0 делает zoneinfo
реализацией по умолчанию. Поддержка pytz
теперь устарела и будет удалена в Django 5.0.
zoneinfo
является частью стандартной библиотеки Python, начиная с Python 3.9. Пакет backports.zoneinfo
автоматически устанавливается вместе с Django, если вы используете Python 3.8.
Переход на zoneinfo
должен быть в значительной степени прозрачным. Выбор текущего часового пояса, преобразование экземпляров времени даты к текущему часовому поясу в формах и шаблонах, а также операции над известными временами даты в UTC остаются незатронутыми.
Однако, если вы работаете с часовыми поясами, отличными от UTC, и используете API pytz
normalize()
и localize()
, возможно, с настройкой TIME_ZONE
, вам придется провести аудит вашего кода, поскольку pytz
и zoneinfo
не совсем эквивалентны.
Чтобы дать время для такого аудита, переходная настройка USE_DEPRECATED_PYTZ
позволяет продолжать использовать pytz
во время цикла выпуска 4.x. Эта настройка будет удалена в Django 5.0.
Кроме того, пакет pytz_deprecation_shim, созданный автором zoneinfo
, может быть использован для помощи в переходе с pytz
. В этом пакете содержатся прокладки, которые помогут вам безопасно удалить pytz
, а также подробный migration guide, показывающий, как перейти на новые API zoneinfo
.
Использование pytz_deprecation_shim и переходной настройки USE_DEPRECATED_PYTZ
рекомендуется, если вам нужен постепенный путь обновления.
Функциональные уникальные ограничения¶
Новый позиционный аргумент *expressions
UniqueConstraint()
позволяет создавать функциональные уникальные ограничения для выражений и функций базы данных. Например:
from django.db import models
from django.db.models import UniqueConstraint
from django.db.models.functions import Lower
class MyModel(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
class Meta:
constraints = [
UniqueConstraint(
Lower("first_name"),
Lower("last_name").desc(),
name="first_last_name_unique",
),
]
Функциональные уникальные ограничения добавляются к моделям с помощью опции Meta.constraints
.
scrypt
хешер пароля¶
Новый scrypt password hasher является более безопасным и рекомендуется вместо PBKDF2. Однако он не используется по умолчанию, так как требует OpenSSL 1.1+ и больше памяти.
Бэкэнд кэша Redis¶
Новый бэкенд кэша django.core.cache.backends.redis.RedisCache
обеспечивает встроенную поддержку кэширования с помощью Redis. Требуется версия redis-py 3.0.0 или выше. Более подробную информацию см. в разделе documentation on caching with Redis in Django.
Рендеринг форм на основе шаблонов¶
Forms
, Formsets и ErrorList
теперь отображаются с использованием шаблонизатора для улучшения настройки. Смотрите новые render()
, get_context()
и template_name
для Form
и formset rendering для Formset
.
Незначительные особенности¶
django.contrib.admin
¶
- В шаблоне
admin/base.html
теперь есть новый блокheader
, который содержит заголовок сайта администратора. - Новый метод
ModelAdmin.get_formset_kwargs()
позволяет настраивать аргументы ключевых слов, передаваемых в конструктор набора форм. - На боковой панели навигации теперь есть панель инструментов быстрого фильтра.
- Новая контекстная переменная
model
, которая содержит класс модели для каждой модели, добавляется в методAdminSite.each_context()
. - Новый атрибут
ModelAdmin.search_help_text
позволяет задать описательный текст для окна поиска. - Атрибут
InlineModelAdmin.verbose_name_plural
теперь возвращается кInlineModelAdmin.verbose_name
+'s'
. - jQuery обновлен с версии 3.5.1 до 3.6.0.
django.contrib.admindocs
¶
- Модуль admindocs теперь позволяет использовать эзотерические установки, в которых
ROOT_URLCONF
не является строкой. - В разделе модели
admindocs
теперь отображаются кэшированные свойства.
django.contrib.auth
¶
- Количество итераций по умолчанию для хешера паролей PBKDF2 увеличено с 260 000 до 320 000.
- Новый атрибут
LoginView.next_page
и методget_default_redirect_url()
позволяют настроить перенаправление после входа в систему.
django.contrib.gis
¶
- Добавлена поддержка SpatiaLite 5.
GDALRaster
теперь позволяет создавать растры в любой виртуальной файловой системе GDAL.- Новый класс
GISModelAdmin
позволяет настраивать виджет, используемый дляGeometryField
. Его рекомендуется использовать вместо устаревшихGeoModelAdmin
иOSMGeoAdmin
.
django.contrib.postgres
¶
- Бэкенд PostgreSQL теперь поддерживает подключение по имени сервиса. Более подробную информацию см. в разделе Настройки подключения к PostgreSQL.
- Новая операция
AddConstraintNotValid
позволяет создавать проверочные ограничения в PostgreSQL без проверки того, что все существующие строки удовлетворяют новому ограничению. - Новая операция
ValidateConstraint
позволяет проверять контрольные ограничения, которые были созданы с помощьюAddConstraintNotValid
на PostgreSQL. - Новое выражение
ArraySubquery()
позволяет использовать подзапросы для построения списков значений в PostgreSQL. - Новый поиск
trigram_word_similar
, а также выраженияTrigramWordDistance()
иTrigramWordSimilarity()
позволяют использовать триграммное сходство слов.
django.contrib.staticfiles
¶
ManifestStaticFilesStorage
теперь заменяет пути к ссылкам на карту источников JavaScript их хэшированными аналогами.- Новый аргумент
manifest_storage
изManifestFilesMixin
иManifestStaticFilesStorage
позволяет настроить хранение файла манифеста.
Кэш¶
Новый async API для
django.core.cache.backends.base.BaseCache
начинает процесс обеспечения асинхронной совместимости бэкендов кэша. Все новые методы async имеют имена с префиксомa
, напримерaadd()
,aget()
,aset()
,aget_or_set()
илиadelete_many()
.В дальнейшем префикс
a
будет использоваться для асинхронных вариантов методов в целом.
CSRF¶
- Защита от CSRF теперь учитывает заголовок
Origin
, если он присутствует. Для облегчения этого требуется установка some changes кCSRF_TRUSTED_ORIGINS
.
Формы¶
ModelChoiceField
теперь включает предоставленное значение в аргументparams
поднятогоValidationError
для сообщения об ошибкеinvalid_choice
. Это позволяет пользовательским сообщениям об ошибках использовать заполнитель%(value)s
.BaseFormSet
теперь отображает ошибки, не относящиеся к форме, с дополнительным классомnonform
, чтобы помочь отличить их от ошибок, специфичных для формы.BaseFormSet
теперь позволяет настроить виджет, используемый при удалении форм черезcan_delete
путем установки атрибутаdeletion_widget
или переопределения методаget_deletion_widget()
.
Интернационализация¶
- Добавлена поддержка и переводы для малайского языка.
Общие представления¶
DeleteView
теперь используетFormMixin
, позволяя вам предоставить подклассForm
, например, с флажком для подтверждения удаления. Кроме того, это позволяетDeleteView
функционировать сdjango.contrib.messages.views.SuccessMessageMixin
.В соответствии с
FormMixin
, удаление объектов для POST-запросов обрабатывается вform_valid()
. Пользовательская логика удаления в обработчикахdelete()
должна быть перенесена вform_valid()
, или в общий вспомогательный метод, по мере необходимости.
Ведение журнала¶
- Псевдоним базы данных, используемый в вызове SQL, теперь передается в качестве дополнительного контекста вместе с каждым сообщением в регистратор django.db.backends.
Команды управления¶
- Команда управления
runserver
теперь поддерживает опцию--skip-checks
. - В PostgreSQL,
dbshell
теперь поддерживает указание файла пароля. - Команда
shell
теперь уважаетsys.__interactivehook__
при запуске. Это позволяет загружать историю оболочки между интерактивными сеансами. Как следствие,readline
больше не загружается при работе в изолированном режиме. - Новый атрибут
BaseCommand.suppressed_base_arguments
позволяет подавить неподдерживаемые параметры команды по умолчанию в выводе справки. - Новые опции
startapp --exclude
иstartproject --exclude
позволяют исключить каталоги из шаблона.
Модели¶
- Новый метод
QuerySet.contains(obj)
возвращает, содержит ли кверисет заданный объект. При этом делается попытка выполнить запрос наиболее простым и быстрым способом. - Новый аргумент
precision
функции базы данныхRound()
позволяет указать количество десятичных знаков после округления. QuerySet.bulk_create()
теперь устанавливает первичный ключ для объектов при использовании SQLite 3.35+.DurationField
теперь поддерживает умножение и деление на скалярные значения в SQLite.QuerySet.bulk_update()
теперь возвращает количество обновленных объектов.- Новый атрибут
Expression.empty_result_set_value
позволяет указать значение, возвращаемое при использовании функции над пустым набором результатов. - Аргумент
skip_locked
вQuerySet.select_for_update()
теперь разрешен в MariaDB 10.6+. - Выражения
Lookup
теперь можно использовать в аннотацияхQuerySet
, агрегатах и непосредственно в фильтрах. - Новый аргумент default для встроенных агрегатов позволяет указать значение, которое будет возвращено, когда кверисет (или группировка) не содержит записей, вместо
None
.
Запросы и ответы¶
SecurityMiddleware
теперь добавляет заголовок Cross-Origin Opener Policy со значением'same-origin'
, чтобы предотвратить совместное использование контекста просмотра кросс-оригинальных всплывающих окон. Вы можете предотвратить добавление этого заголовка, установив для параметраSECURE_CROSS_ORIGIN_OPENER_POLICY
значениеNone
.
Сигналы¶
- Новый аргумент
stdout
для сигналовpre_migrate()
иpost_migrate()
позволяет перенаправить вывод на потокоподобный объект. Его следует предпочестьsys.stdout
иprint()
при выдаче подробного вывода, чтобы обеспечить надлежащий захват при тестировании.
Шаблоны¶
- Фильтр шаблонов
floatformat
теперь позволяет использовать суффиксu
для принудительного отключения локализации.
Тесты¶
- Новый аргумент
serialized_aliases
вdjango.test.utils.setup_databases()
определяет, какие тестовые базы данных псевдонимовDATABASES
должны иметь сериализованное состояние, чтобы можно было использовать функцию serialized_rollback. - Параметр
test --buffer
теперь поддерживает параллельные тесты. - Новый аргумент
logger
вDiscoverRunner
позволяет использовать для протоколирования Python logger. - Новый метод
DiscoverRunner.log()
предоставляет способ регистрации сообщений, который используетDiscoverRunner.logger
, или печатает на консоль, если не установлен. DiscoverRunner
теперь вы можете выполнять тесты в случайном порядке, используя опциюtest --shuffle
.- Опция
test --parallel
теперь поддерживает значениеauto
для запуска одного процесса тестирования для каждого ядра процессора. TestCase.captureOnCommitCallbacks()
теперь перехватывает новые обратные вызовы, добавленные во время выполнения обратных вызововtransaction.on_commit()
.
Изменения в 4.0, несовместимые с обратными факторами¶
API бэкенда базы данных¶
В этом разделе описаны изменения, которые могут потребоваться в бэкендах баз данных сторонних производителей.
- Методы
DatabaseOperations.year_lookup_bounds_for_date_field()
иyear_lookup_bounds_for_datetime_field()
теперь принимают необязательный аргументiso_year
, чтобы поддерживать границы для лет с нумерацией недель ISO-8601. - Вторым аргументом методов
DatabaseSchemaEditor._unique_sql()
и_create_unique_sql()
теперь являетсяfields
вместоcolumns
.
django.contrib.gis
¶
- Удалена поддержка PostGIS 2.3.
- Удалена поддержка GDAL 2.0 и GEOS 3.5.
Прекращена поддержка PostgreSQL 9.6¶
Поддержка PostgreSQL 9.6 заканчивается в ноябре 2021 года. Django 4.0 поддерживает PostgreSQL 10 и выше.
Также минимальная поддерживаемая версия psycopg2
увеличена с 2.5.4 до 2.8.4, поскольку psycopg2
2.8.4 является первым релизом, поддерживающим Python 3.8.
Прекращена поддержка Oracle 12.2 и 18c¶
Поддержка Oracle 12.2 заканчивается в марте 2022 года, а Oracle 18c - в июне 2021 года. Django 3.2 будет поддерживаться до апреля 2024 года. Django 4.0 официально поддерживает Oracle 19c.
CSRF_TRUSTED_ORIGINS
изменения¶
Изменение формата¶
Значения в параметре CSRF_TRUSTED_ORIGINS
должны включать схему (например, 'http://'
или 'https://'
), а не только имя хоста.
Кроме того, значения, начинающиеся с точки, теперь должны содержать звездочку перед точкой. Например, измените '.example.com'
на 'https://*.example.com'
.
Проверка системы обнаруживает все необходимые изменения.
Настройка может потребоваться¶
Поскольку защита от CSRF теперь использует заголовок Origin
, вам может понадобиться установить CSRF_TRUSTED_ORIGINS
, особенно если вы разрешаете запросы с поддоменов, установив CSRF_COOKIE_DOMAIN
(или SESSION_COOKIE_DOMAIN
, если включено CSRF_USE_SESSIONS
) на значение, начинающееся с точки.
SecurityMiddleware
больше не устанавливает заголовок X-XSS-Protection
¶
SecurityMiddleware
больше не устанавливает заголовок X-XSS-Protection
, если параметром SECURE_BROWSER_XSS_FILTER
является True
. Настройка удаляется.
Большинство современных браузеров не соблюдают HTTP-заголовок X-XSS-Protection
. Вместо этого вы можете использовать Content-Security-Policy без разрешения 'unsafe-inline'
скриптов.
Если вы хотите поддерживать устаревшие браузеры и установить заголовок, используйте эту строку в пользовательском промежуточном ПО:
response.headers.setdefault("X-XSS-Protection", "1; mode=block")
Изменения в автодетекторе миграции¶
Автоопределитель миграций теперь использует состояния модели вместо классов модели. Также операции миграции для полей ForeignKey
и ManyToManyField
больше не указывают атрибуты, которые не были переданы полям при инициализации.
В качестве побочного эффекта, выполнение makemigrations
в некоторых случаях может генерировать безоперационные операции AlterField
для полей ManyToManyField
и ForeignKey
.
DeleteView
изменения¶
DeleteView
теперь использует FormMixin
для обработки POST-запросов. Как следствие, любая пользовательская логика удаления в обработчиках delete()
должна быть перенесена в form_valid()
, или в общий вспомогательный метод, если это необходимо.
Изменения схемы именования таблиц и столбцов в Oracle¶
Django 4.0 непреднамеренно изменил схему именования таблиц и столбцов в Oracle. Это вызывает ошибки для моделей и полей с именами длиннее 30 символов. К сожалению, требуется переименование некоторых таблиц и столбцов Oracle. Используйте скрипт обновления в 33789 для генерации операторов RENAME
для изменения схемы именования.
Разное¶
- Удалена поддержка
cx_Oracle
< 7.0. - Чтобы позволить обслуживать сайт Django на подпути без изменения значения
STATIC_URL
, в шаблоне по умолчанию'static/'
из этого параметра (теперьstartproject
) удалена ведущая косая черта. - Метод
AdminSite
для представления администратораindex
больше не украшаетсяnever_cache
при прямом обращении, а не через рекомендуемое свойствоAdminSite.urls
или методAdminSite.get_urls()
. - Неподдерживаемые операции над нарезанным кверисетом теперь вызывают ошибку
TypeError
вместоAssertionError
. - Недокументированная функция
django.test.runner.reorder_suite()
переименована вreorder_tests()
. Теперь она принимает итератор тестов, а не набор тестов, и возвращает итератор тестов. - Вызов
FileSystemStorage.delete()
с пустымname
теперь повышаетValueError
вместоAssertionError
. - Вызов
EmailMultiAlternatives.attach_alternative()
илиEmailMessage.attach()
с недопустимыми аргументамиcontent
илиmimetype
теперь вызываетValueError
вместоAssertionError
. assertHTMLEqual()
больше не считает небулевый атрибут без значения равным атрибуту с тем же именем и значением.- Тесты, которые не загружаются, например, из-за синтаксических ошибок, теперь всегда совпадают при использовании
test --tag
. - Недокументированная функция
django.contrib.admin.utils.lookup_needs_distinct()
переименована вlookup_spawns_duplicates()
. - Недокументированный метод
HttpRequest.get_raw_uri()
удален. МетодHttpRequest.build_absolute_uri()
может быть подходящей альтернативой. - Аргумент
object
недокументированных методовModelAdmin.log_addition()
,log_change()
иlog_deletion()
переименован вobj
. RssFeed
,Atom1Feed
и их подклассы теперь выдают элементы без содержимого как самозакрывающиеся теги.NodeList.render()
больше не приводит вывод методаrender()
для отдельных узлов к строке.Node.render()
всегда должен возвращать строку, как это задокументировано.- Свойство
where_class
уdjango.db.models.sql.query.Query
и аргументwhere_class
у метода privateget_extra_restriction()
уForeignObject
иForeignObjectRel
удаляются. Если необходимо, инициализируйтеdjango.db.models.sql.where.WhereNode
вместо этого. - Аргумент
filter_clause
недокументированного методаQuery.add_filter()
заменен двумя позиционными аргументамиfilter_lhs
иfilter_rhs
. CsrfViewMiddleware
теперь используетrequest.META['CSRF_COOKIE_NEEDS_UPDATE']
вместоrequest.META['CSRF_COOKIE_USED']
,request.csrf_cookie_needs_reset
иresponse.csrf_cookie_set
для отслеживания необходимости отправки CSRF cookie. Это недокументированный, частный API.- Недокументированная константа
TRANSLATOR_COMMENT_MARK
перенесена изdjango.template.base
вdjango.utils.translation.template
. - Аргумент
real_apps
недокументированного методаdjango.db.migrations.state.ProjectState.__init__()
теперь должен быть множеством, если он указан. - Виджеты
RadioSelect
иCheckboxSelectMultiple
теперь отображаются в тегах<div>
, поэтому они более лаконично объявляются программами чтения с экрана. Если вам нужно прежнее поведение, override the widget template с соответствующим шаблоном из Django 3.2. - Фильтр шаблонов
floatformat
больше не зависит от настройкиUSE_L10N
и всегда возвращает локализованный вывод. Для отключения локализации используйте суффиксu
. - Значение по умолчанию параметра
USE_L10N
изменяется наTrue
. Более подробную информацию см. в разделе Localization section выше. - Как часть move to zoneinfo,
django.utils.timezone.utc
заменяется на псевдонимdatetime.timezone.utc
. - Минимальная поддерживаемая версия
asgiref
увеличена с 3.3.2 до 3.4.1.
Функции, устаревшие в версии 4.0¶
Использование часовых поясов pytz
¶
В рамках move to zoneinfo использование часовых поясов pytz
устарело.
Соответственно, аргументы is_dst
для следующих аргументов также устарели:
django.db.models.query.QuerySet.datetimes()
django.db.models.functions.Trunc()
django.db.models.functions.TruncSecond()
django.db.models.functions.TruncMinute()
django.db.models.functions.TruncHour()
django.db.models.functions.TruncDay()
django.db.models.functions.TruncWeek()
django.db.models.functions.TruncMonth()
django.db.models.functions.TruncQuarter()
django.db.models.functions.TruncYear()
django.utils.timezone.make_aware()
Поддержка использования pytz
будет удалена в Django 5.0.
Поддержка часовых поясов¶
Чтобы следовать хорошей практике, в Django 5.0 значение параметра USE_TZ
по умолчанию изменится с False
на True
, а поддержка часовых поясов будет включена по умолчанию.
Обратите внимание, что файл settings.py
, создаваемый по умолчанию django-admin startproject
, включает USE_TZ = True
начиная с Django 1.4.
Вы можете установить USE_TZ
на False
в настройках проекта до этого, чтобы отказаться от использования.
Локализация¶
Для того чтобы следовать хорошей практике, значение по умолчанию параметра USE_L10N
изменено с False
на True
.
Более того, USE_L10N
устарело с этого релиза. Начиная с Django 5.0, по умолчанию, любая дата или число, отображаемые Django, будут локализованы.
Тег {% localize %}
и фильтры localize
/ unlocalize
будут по-прежнему соблюдаться Django.
Разное¶
- Настройка теста
SERIALIZE
устарела, поскольку она может быть выведена изdatabases
при включенной опции serialized_rollback. - Недокументированный модуль
django.utils.baseconv
является устаревшим. - Недокументированный модуль
django.utils.datetime_safe
является устаревшим. - В Django 5.0 протокол по умолчанию для карт сайта, построенных вне контекста запроса, изменится с
'http'
на'https'
. - Аргумент
extra_tests
дляDiscoverRunner.build_suite()
иDiscoverRunner.run_tests()
устарел. - Агрегаты
ArrayAgg
,JSONBAgg
иStringAgg
будут возвращатьNone
при отсутствии строк вместо[]
,[]
и''
соответственно в Django 5.0. Если вам нужно предыдущее поведение, явно установитеdefault
вValue([])
,Value('[]')
илиValue('')
. - Классы
django.contrib.gis.admin.GeoModelAdmin
иOSMGeoAdmin
устарели. Вместо них используйтеModelAdmin
иGISModelAdmin
. - Поскольку рендеринг формы теперь использует шаблонизатор, недокументированный вспомогательный метод
BaseForm._html_output()
устарел. - Возможность возвращать
str
изErrorList
иErrorDict
устарела. Ожидается, что эти методы будут возвращатьSafeString
.
Функции, удаленные в версии 4.0¶
Эти функции достигли конца своего цикла устаревания и будут удалены в Django 4.0.
Подробнее об этих изменениях, в том числе о том, как удалить использование этих функций, смотрите Функции, устаревшие в версии 3.0.
django.utils.http.urlquote()
,urlquote_plus()
,urlunquote()
иurlunquote_plus()
удаляются.django.utils.encoding.force_text()
иsmart_text()
удаляются.django.utils.translation.ugettext()
,ugettext_lazy()
,ugettext_noop()
,ungettext()
иungettext_lazy()
удаляются.django.views.i18n.set_language()
не устанавливает язык пользователя вrequest.session
(клавиша_language
).alias=None
требуется в сигнатуре подклассовdjango.db.models.Expression.get_group_by_cols()
.django.utils.text.unescape_entities()
удаляется.django.utils.http.is_safe_url()
удаляется.
Подробнее об этих изменениях, в том числе о том, как удалить использование этих функций, смотрите Функции, устаревшие в версии 3.1.
- Настройка
PASSWORD_RESET_TIMEOUT_DAYS
удаляется. - Поиск
isnull
больше не позволяет использовать в качестве правой части небулевые значения. - Класс исключений
django.db.models.query_utils.InvalidQuery
удален. - Точка входа
django-admin.py
удаляется. - Метод
HttpRequest.is_ajax()
удален. - Удалена поддержка формата кодировки значений cookies, существовавшего до версии Django 3.1 и использовавшегося
django.contrib.messages.storage.cookie.CookieStorage
. - Удалена поддержка токенов для сброса пароля в админке до версии Django 3.1 (которые используют алгоритм хэширования SHA-1).
- Удалена поддержка формата кодировки сессий, существовавшего до версии Django 3.1.
- Удалена поддержка подписей
django.core.signing.Signer
, существовавших до версии Django 3.1 (закодированных с помощью алгоритма SHA-1). - Убрана поддержка подписей
django.core.signing.dumps()
, существовавших до версии Django 3.1 (закодированных алгоритмом SHA-1) вdjango.core.signing.loads()
. - Удалена поддержка пользовательских сессий, существовавших до версии Django 3.1 (которые используют алгоритм SHA-1).
- Аргумент
get_response
дляdjango.utils.deprecation.MiddlewareMixin.__init__()
является обязательным и не принимаетNone
. - Аргумент
providing_args
дляdjango.dispatch.Signal
удаляется. - Аргумент
length
дляdjango.utils.crypto.get_random_string()
является обязательным. - Сообщение
list
дляModelMultipleChoiceField
удалено. - Поддержка передачи необработанных псевдонимов столбцов в
QuerySet.order_by()
удалена. - Поле модели
NullBooleanField
удалено, за исключением поддержки в исторических миграциях. django.conf.urls.url()
удаляется.- Поле модели
django.contrib.postgres.fields.JSONField
удалено, за исключением поддержки в исторических миграциях. django.contrib.postgres.fields.jsonb.KeyTransform
иdjango.contrib.postgres.fields.jsonb.KeyTextTransform
удаляются.django.contrib.postgres.forms.JSONField
удаляется.- Теги шаблонов
{% ifequal %}
и{% ifnotequal %}
удалены. - Переходная настройка
DEFAULT_HASHING_ALGORITHM
удалена.