Django 3.2 release notes¶
April 6, 2021
Добро пожаловать в Django 3.2!
Эти заметки о выпуске охватывают new features, а также некоторые backwards incompatible changes, о которых вы должны знать при переходе с Django 3.1 или более ранней версии. Мы begun the deprecation process for some features.
См. руководство How to upgrade Django to a newer version, если вы обновляете существующий проект.
Django 3.2 обозначен как long-term support release. Она будет получать обновления безопасности в течение как минимум трех лет после выпуска. Поддержка предыдущей версии LTS, Django 2.2, закончится в апреле 2022 года.
Совместимость с Python¶
Django 3.2 supports Python 3.6, 3.7, 3.8, 3.9, and 3.10 (as of 3.2.9). We highly recommend and only officially support the latest release of each series.
Что нового в Django 3.2¶
Автоматическое обнаружение AppConfig
¶
Большинство подключаемых приложений определяют AppConfig
подкласс в apps.py
подмодуле. Многие определяют переменную <<<2 >>>, указывающую на этот класс в своем <<<3 >>>.
Когда субмодуль apps.py
существует и определяет единственный подкласс AppConfig
, Django теперь использует эту конфигурацию автоматически, так что вы можете удалить default_app_config
.
default_app_config
позволил объявлять только путь приложения в INSTALLED_APPS
(например, 'django.contrib.admin'
), а не путь конфигурации приложения (например, 'django.contrib.admin.apps.AdminConfig'
). Он был введен для обратной совместимости с первым стилем, с намерением перевести экосистему на второй, но переход не произошел.
С автоматическим обнаружением AppConfig
, default_app_config
больше не нужен. Как следствие, он устарел.
Подробную информацию см. в разделе Настройка приложений.
Настройка типа автоматически создаваемых первичных ключей¶
При определении модели, если ни одно поле в модели не определено с помощью primary_key=True
, добавляется неявный первичный ключ. Тип этого неявного первичного ключа теперь можно контролировать с помощью параметра DEFAULT_AUTO_FIELD
и атрибута AppConfig.default_auto_field
. Больше нет необходимости переопределять первичные ключи во всех моделях.
В соответствии с историческим поведением, значение по умолчанию для DEFAULT_AUTO_FIELD
равно AutoField
. Начиная с версии 3.2 новые проекты создаются с DEFAULT_AUTO_FIELD
, установленным на BigAutoField
. Также, новые приложения создаются с AppConfig.default_auto_field
, установленным в BigAutoField
. В будущем выпуске Django значение по умолчанию DEFAULT_AUTO_FIELD
будет изменено на BigAutoField
.
Чтобы избежать нежелательных миграций в будущем, либо явно установите DEFAULT_AUTO_FIELD
в AutoField
:
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
или настроить его для каждого приложения:
from django.apps import AppConfig
class MyAppConfig(AppConfig):
default_auto_field = 'django.db.models.AutoField'
name = 'my_app'
или по отдельным моделям:
from django.db import models
class MyModel(models.Model):
id = models.AutoField(primary_key=True)
В преддверии изменения значения по умолчанию, проверка системы выдаст предупреждение, если у вас нет явной настройки для DEFAULT_AUTO_FIELD
.
При изменении значения DEFAULT_AUTO_FIELD
в настоящее время не могут быть созданы миграции для первичного ключа существующих автоматически создаваемых сквозных таблиц. Подробнее о миграции таких таблиц см. в документации DEFAULT_AUTO_FIELD
.
Функциональные индексы¶
Новый позиционный аргумент *expressions
Index()
позволяет создавать функциональные индексы на выражениях и функциях базы данных. Например:
from django.db import models
from django.db.models import F, Index, Value
from django.db.models.functions import Lower, Upper
class MyModel(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
height = models.IntegerField()
weight = models.IntegerField()
class Meta:
indexes = [
Index(
Lower('first_name'),
Upper('last_name').desc(),
name='first_last_name_idx',
),
Index(
F('height') / (F('weight') + Value(5)),
name='calc_idx',
),
]
Функциональные индексы добавляются к моделям с помощью опции Meta.indexes
.
pymemcache
поддержка¶
Новый django.core.cache.backends.memcached.PyMemcacheCache
бэкенд кэша позволяет использовать библиотеку pymemcache для memcached. Требуется версия pymemcache
3.4.0 или выше. Для более подробной информации см. раздел documentation on caching in Django.
Новые декораторы для сайта администратора¶
Новый декоратор display()
позволяет легко добавлять опции к пользовательским функциям отображения, которые могут использоваться с list_display
или readonly_fields
.
Аналогично, новый декоратор action()
позволяет легко добавлять опции к функциям действия, которые могут быть использованы с actions
.
Преимущество использования декоратора @display
заключается в том, что теперь можно использовать декоратор @property
, когда необходимо указать атрибуты пользовательского метода. До этого необходимо было использовать функцию property()
после присвоения методу необходимых атрибутов.
Преимущество использования декораторов заключается в том, что эти опции более доступны для обнаружения, поскольку они могут быть предложены утилитами завершения в редакторах кода. Они являются лишь удобством и по-прежнему устанавливают те же атрибуты для функций под капотом.
Незначительные особенности¶
django.contrib.admin
¶
ModelAdmin.search_fields
теперь позволяет выполнять поиск по цитируемым фразам с пробелами.Связанные поля, доступные только для чтения, теперь отображаются как ссылки с возможностью навигации, если целевые модели зарегистрированы в администраторе.
Админка теперь поддерживает тематическое оформление и включает темную тему, которая включается в соответствии с настройками браузера. Более подробную информацию смотрите в Поддержка программирования.
ModelAdmin.autocomplete_fields
теперь уважаетForeignKey.to_field
иForeignKey.limit_choices_to
при поиске связанной модели.Теперь администратор устанавливает последнее представление, которое перенаправляет неаутентифицированных пользователей на страницу входа в систему, независимо от того, является ли URL-адрес действительным. Это защищает от потенциальной проблемы конфиденциальности перечисления моделей.
Хотя это не рекомендуется, вы можете установить новый параметр
AdminSite.final_catch_all_view
наFalse
, чтобы отключить всеобъемлющее представление.
django.contrib.auth
¶
Количество итераций по умолчанию для хешера паролей PBKDF2 увеличено с 216 000 до 260 000.
Вариант по умолчанию для хешера паролей Argon2 изменен на Argon2id.
memory_cost
иparallelism
увеличены до 102,400 и 8 соответственно, чтобы соответствоватьargon2-cffi
по умолчанию.Увеличение
memory_cost
увеличивает требуемую память с 512 КБ до 100 МБ. Это все еще довольно консервативно, но может привести к проблемам в средах с ограниченным объемом памяти. В этом случае существующий хэшер можно подклассифицировать, чтобы переопределить значения по умолчанию.The default salt entropy for the Argon2, MD5, PBKDF2, SHA-1 password hashers is increased from 71 to 128 bits.
django.contrib.contenttypes
¶
- Новый аргумент
absolute_max
дляgeneric_inlineformset_factory()
позволяет настроить максимальное количество форм, которые могут быть инстанцированы при предоставлении данныхPOST
. Более подробную информацию смотрите в Ограничение максимального количества инстанцированных форм. - Новый аргумент
can_delete_extra
дляgeneric_inlineformset_factory()
позволяет убрать возможность удаления лишних форм. Более подробную информацию смотрите вcan_delete_extra
.
django.contrib.gis
¶
- Метод
GDALRaster.transform()
теперь поддерживаетSpatialReference
. - Класс
DataSource
теперь поддерживаетpathlib.Path
. - Класс
LayerMapping
теперь поддерживаетpathlib.Path
.
django.contrib.postgres
¶
- Новый атрибут
ExclusionConstraint.include
позволяет создавать охватывающие ограничения исключения на PostgreSQL 12+. - Новый атрибут
ExclusionConstraint.opclasses
позволяет устанавливать классы операторов PostgreSQL. - Новый атрибут
JSONBAgg.ordering
определяет порядок следования агрегированных элементов. - The new
JSONBAgg.distinct
attribute determines if aggregated values will be distinct. - Операция
CreateExtension
теперь проверяет, что расширение уже существует в базе данных, и пропускает миграцию, если это так. - Новые операции
CreateCollation
иRemoveCollation
позволяют создавать и сбрасывать коллации в PostgreSQL. Более подробную информацию смотрите в разделе Managing collations using migrations. - Поиск для
ArrayField
теперь позволяет использовать (не вложенные) массивы, содержащие выражения в качестве правых сторон. - Новое выражение
OpClass()
позволяет создавать функциональные индексы на выражениях с пользовательским классом оператора. Более подробную информацию см. в разделе Функциональные индексы.
django.contrib.sitemaps
¶
- Новые атрибуты
Sitemap
alternates
,languages
иx_default
позволяют генерировать альтернативные карты сайта для локализованных версий ваших страниц.
django.contrib.syndication
¶
- Новый хук
item_comments
позволяет указывать URL комментариев для каждого элемента фида.
Database backends¶
- Сторонние бэкенды баз данных теперь могут пропускать или отмечать как ожидаемые отказы тестов в тестовом наборе Django, используя новые атрибуты
DatabaseFeatures.django_test_skips
иdjango_test_expected_failures
.
Декораторы¶
- Новый декоратор
no_append_slash()
позволяет исключить отдельные представления из нормализации URLAPPEND_SLASH
.
Отчеты об ошибках¶
- Пользовательские подклассы
ExceptionReporter
теперь могут определять свойстваhtml_template_path
иtext_template_path
для переопределения шаблонов, используемых для вывода отчетов об исключениях.
Загрузка файлов¶
- Новый обратный вызов
FileUploadHandler.upload_interrupted()
позволяет обрабатывать прерванные загрузки.
Формы¶
- Новый аргумент
absolute_max
дляformset_factory()
,inlineformset_factory()
иmodelformset_factory()
позволяет настроить максимальное количество форм, которые могут быть созданы при предоставлении данныхPOST
. Более подробную информацию см. в разделе Ограничение максимального количества инстанцированных форм. - Новый аргумент
can_delete_extra
дляformset_factory()
,inlineformset_factory()
иmodelformset_factory()
позволяет убрать возможность удаления лишних форм. Дополнительную информацию см. вcan_delete_extra
. BaseFormSet
теперь сообщает об ошибке, с которой сталкивается пользователь, вместо того, чтобы создавать исключение, когда форма управления отсутствует или была испорчена. Чтобы настроить это сообщение об ошибке, передайте аргументerror_messages
с ключом'missing_management_form'
при инстанцировании набора форм.
Общие представления¶
- Атрибуты
week_format
WeekMixin
иWeekArchiveView
теперь поддерживают формат недели'%V'
ISO 8601.
Команды управления¶
loaddata
теперь поддерживает фиксы, хранящиеся в XZ архивах (.xz
) и LZMA архивах (.lzma
).dumpdata
теперь может сжимать данные в форматахbz2
,gz
,lzma
илиxz
.makemigrations
теперь можно вызывать без активного соединения с базой данных. В этом случае проверка на наличие последовательной истории миграции пропускается.BaseCommand.requires_system_checks
теперь поддерживает указание списка тегов. Системные проверки, зарегистрированные в выбранных тегах, будут проверены на наличие ошибок перед выполнением команды. В предыдущих версиях выполнялись либо все, либо ни одна из системных проверок.- Обновлена поддержка цветного вывода терминала в Windows. Различные современные терминальные среды определяются автоматически, а возможности включения поддержки в других случаях улучшены. Более подробную информацию см. в разделе Синтаксическая раскраска.
Миграции¶
- Новое свойство
Operation.migration_name_fragment
позволяет указать фрагмент имени файла, который будет использоваться для названия миграции, содержащей только эту операцию. - Миграции теперь поддерживают сериализацию чистых и конкретных объектов path из экземпляров
pathlib
, иos.PathLike
.
Модели¶
- Новый параметр
no_key
дляQuerySet.select_for_update()
, поддерживаемый в PostgreSQL, позволяет приобретать более слабые блокировки, которые не блокируют создание строк, ссылающихся на заблокированные строки через внешний ключ. - Выражение
When()
теперь позволяет использовать аргументcondition
сlookups
. - Новые атрибуты
Index.include
иUniqueConstraint.include
позволяют создавать покрывающие индексы и покрывающие уникальные ограничения на PostgreSQL 11+. - Новый атрибут
UniqueConstraint.opclasses
позволяет устанавливать классы операторов PostgreSQL. - Метод
QuerySet.update()
теперь уважает условиеorder_by()
в MySQL и MariaDB. FilteredRelation()
теперь поддерживает вложенные отношения.- Аргумент
of
QuerySet.select_for_update()
теперь разрешен в MySQL 8.0.1+. Value()
expression now automatically resolves itsoutput_field
to the appropriateField
subclass based on the type of its providedvalue
forbool
,bytes
,float
,int
,str
,datetime.date
,datetime.datetime
,datetime.time
,datetime.timedelta
,decimal.Decimal
, anduuid.UUID
instances. As a consequence, resolving anoutput_field
for database functions and combined expressions may now crash with mixed types when usingValue()
. You will need to explicitly set theoutput_field
in such cases.- Новый метод
QuerySet.alias()
позволяет создавать многократно используемые псевдонимы для выражений, которые не нужно выбирать, но используются для фильтрации, упорядочивания или как часть сложных выражений. - Новая функция
Collate
позволяет фильтровать и упорядочивать по заданным коллациям базы данных. - Аргумент
field_name
вQuerySet.in_bulk()
теперь принимает разные поля, если вQuerySet.distinct()
указано только одно поле. - Новый параметр
tzinfo
функций баз данныхTruncDate
иTruncTime
позволяет усекать даты в определенном часовом поясе. - Новый аргумент
db_collation
дляCharField
иTextField
позволяет установить коллизию базы данных для поля. - Added the
Random
database function. - Агрегационные функции,
F()
,OuterRef()
и другие выражения теперь позволяют использовать преобразования. Подробности см. в разделе Выражения могут ссылаться на преобразования. - Новый аргумент
durable
дляatomic()
гарантирует, что изменения, сделанные в атомарном блоке, будут зафиксированы, если блок завершится без ошибок. Вложенный атомарный блок, помеченный как долговечный, вызовет сигналRuntimeError
. - Добавлена функция базы данных
JSONObject
.
Пагинация¶
- Новый метод
django.core.paginator.Paginator.get_elided_page_range()
позволяет генерировать диапазон страниц с некоторыми значениями, исключенными из списка. Если имеется большое количество страниц, это может быть полезно для генерации разумного количества ссылок на страницы в шаблоне.
Запросы и ответы¶
- Заголовки ответов теперь хранятся в виде
HttpResponse.headers
. Это можно использовать вместо оригинального диктоподобного интерфейса объектовHttpResponse
. Оба интерфейса будут по-прежнему поддерживаться. Подробности смотрите в Настройка полей заголовка. - Новый параметр
headers
вHttpResponse
,SimpleTemplateResponse
иTemplateResponse
позволяет установить ответheaders
при инстанцировании.
Безопасность¶
Параметр
SECRET_KEY
теперь проверяется на действительное значение при первом доступе, а не при первой загрузке настроек. Это позволяет выполнять команды управления, которые не зависят отSECRET_KEY
, без необходимости предоставлять значение. Как следствие этого, вызовconfigure()
без предоставления действительногоSECRET_KEY
, а затем обращение кsettings.SECRET_KEY
теперь вызовет исключениеImproperlyConfigured
.Новые методы
Signer.sign_object()
иSigner.unsign_object()
позволяют подписывать сложные структуры данных. Более подробную информацию см. в разделе Защита сложных структур данных.Кроме того,
signing.dumps()
иloads()
становятся сокращениями дляTimestampSigner.sign_object()
иunsign_object()
.
Сериализация¶
Сигналы¶
Signal.send_robust()
теперь регистрирует исключения.
Шаблоны¶
- Фильтр шаблонов
floatformat
теперь позволяет использовать суффиксg
для принудительной группировки поTHOUSAND_SEPARATOR
для активной локали. - Шаблоны, кэшированные с помощью Cached template loaders, теперь корректно перезагружаются при разработке.
Тесты¶
- Объекты, назначенные атрибутам класса в
TestCase.setUpTestData()
, теперь изолированы для каждого метода тестирования. Такие объекты теперь необходимы для поддержки создания глубоких копий с помощью :py<<1 >>>. Присвоение объектов, которые не поддерживаютcopy.deepcopy()
, устарело и будет удалено в Django 4.1. DiscoverRunner
теперь включаетfaulthandler
по умолчанию. Это можно отключить с помощью опцииtest --no-faulthandler
.DiscoverRunner
и команда управленияtest
теперь могут отслеживать время, включая установку базы данных и общее время работы. Это можно включить с помощью опцииtest --timing
.Client
теперь сохраняет строку запроса при следовании 307 и 308 редиректам.- Новый метод
TestCase.captureOnCommitCallbacks()
фиксирует функции обратного вызова, переданные вtransaction.on_commit()
в виде списка. Это позволяет тестировать такие обратные вызовы без использования более медленного методаTransactionTestCase
. TransactionTestCase.assertQuerysetEqual()
now supports direct comparison against another queryset rather than being restricted to comparison against a list of string representations of objects when using the default value for thetransform
argument.
Утилиты¶
- Новый параметр
depth
функцийdjango.utils.timesince.timesince()
иdjango.utils.timesince.timeuntil()
позволяет указать количество смежных единиц времени для возврата.
Валидаторы¶
- Встроенные валидаторы теперь включают предоставленное значение в аргумент
params
поднятогоValidationError
. Это позволяет в пользовательских сообщениях об ошибках использовать заполнитель%(value)s
. - Оператор равенства
ValidationError
теперь игнорирует упорядочиваниеmessages
иparams
.
Изменения в версии 3.2, несовместимые с обратными изменениями¶
API бэкенда базы данных¶
В этом разделе описаны изменения, которые могут потребоваться в бэкендах баз данных сторонних производителей.
- Новое свойство
DatabaseFeatures.introspected_field_types
заменяет эти функции:can_introspect_autofield
can_introspect_big_integer_field
can_introspect_binary_field
can_introspect_decimal_field
can_introspect_duration_field
can_introspect_ip_address_field
can_introspect_positive_integer_field
can_introspect_small_integer_field
can_introspect_time_field
introspected_big_auto_field_type
introspected_small_auto_field_type
introspected_boolean_field_type
- Чтобы включить поддержку покрывающих индексов (
Index.include
) и покрывающих уникальных ограничений (UniqueConstraint.include
), установитеDatabaseFeatures.supports_covering_indexes
наTrue
. - Бэкенды баз данных сторонних производителей должны реализовать поддержку коллаций баз данных столбцов на
CharField
s иTextField
s или установитьDatabaseFeatures.supports_collation_on_charfield
иDatabaseFeatures.supports_collation_on_textfield
наFalse
. Если недетерминированные колляции не поддерживаются, установитеsupports_non_deterministic_collations
вFalse
. DatabaseOperations.random_function_sql()
удаляется в пользу новой функции базы данныхRandom
.DatabaseOperations.date_trunc_sql()
иDatabaseOperations.time_trunc_sql()
теперь принимают необязательный аргументtzname
для усечения в определенном часовом поясе.DatabaseClient.runshell()
теперь из методаDatabaseClient.settings_to_cmd_args_env()
получает аргументы и необязательный словарь с переменными окружения для базового клиента командной строки. Сторонние бэкенды баз данных должны реализоватьDatabaseClient.settings_to_cmd_args_env()
или переопределитьDatabaseClient.runshell()
.- Бэкенды баз данных сторонних производителей должны реализовать поддержку функциональных индексов (
Index.expressions
) или установитьDatabaseFeatures.supports_expression_indexes
вFalse
. ЕслиCOLLATE
не является частью оператораCREATE INDEX
, установитеDatabaseFeatures.collate_as_index_expression
вTrue
.
django.contrib.admin
¶
- Ссылки пагинации в админке теперь 1-индексируются вместо 0-индексируемых, т.е. строка запроса для первой страницы
?p=1
вместо?p=0
. - Новое представление «catch-all» для администраторов будет нарушать шаблоны URL, направленные после URL-адресов администраторов и соответствующие префиксу URL-адреса администратора. Вы можете либо скорректировать порядок URL, либо, если необходимо, установить
AdminSite.final_catch_all_view
наFalse
, отключив представление catch-all. Более подробную информацию см. в разделе Что нового в Django 3.2. - Минифицированные файлы JavaScript больше не включаются в админку. Если вам требуется минификация этих файлов, воспользуйтесь сторонним приложением или внешним инструментом сборки. Минифицированные вендорные файлы JavaScript, упакованные с администратором (например, jquery.min.js), по-прежнему включены.
ModelAdmin.prepopulated_fields
больше не удаляет английские стоп-слова, такие как'a'
или'an'
.
django.contrib.gis
¶
- Удалена поддержка PostGIS 2.2.
- Бэкэнд Oracle теперь клонирует полигоны (и коллекции геометрии, содержащие полигоны) перед их переориентацией и сохранением в базе данных. Они больше не мутируют на месте. Вы можете заметить это, если используете полигоны после сохранения модели.
Прекращена поддержка PostgreSQL 9.5¶
Поддержка PostgreSQL 9.5 заканчивается в феврале 2021 года. Django 3.2 поддерживает PostgreSQL 9.6 и выше.
Прекращена поддержка MySQL 5.6¶
Окончание поддержки MySQL 5.6 приходится на апрель 2021 года. Django 3.2 поддерживает MySQL 5.7 и выше.
Разное¶
Django теперь поддерживает не``pytz`` часовые пояса, например, модуль
zoneinfo
в Python 3.9+ и его бэкпорт.Недокументированный метод
SpatiaLiteOperations.proj4_version()
переименован вproj_version()
.slugify()
теперь удаляет ведущие и последующие тире и знаки подчеркивания.The
intcomma
andintword
template filters no longer depend on theUSE_L10N
setting.Удалена поддержка
argon2-cffi
< 19.1.0.Ключи кэша больше не включают язык, когда интернационализация отключена (
USE_I18N = False
) и локализация включена (USE_L10N = True
). После обновления до Django 3.2 в таких конфигурациях первый запрос к любому ранее кэшированному значению будет пропуском кэша.ForeignKey.validate()
теперь использует_base_manager
, а не_default_manager
для проверки существования связанных экземпляров.Когда приложение определяет подкласс
AppConfig
в подмодулеapps.py
, Django теперь использует эту конфигурацию автоматически, даже если она не включена с помощьюdefault_app_config
. Установитеdefault = False
в подклассеAppConfig
, если вам нужно предотвратить такое поведение. Более подробную информацию смотрите в Что нового в Django 3.2.Инстанцирование абстрактной модели теперь вызывает
TypeError
.Аргументы ключевых слов в
setup_databases()
теперь только для ключевых слов.Недокументированная функция
django.utils.http.limited_parse_qsl()
удалена. Вместо нее используйтеurllib.parse.parse_qsl()
.django.test.utils.TestContextDecorator
теперь используетaddCleanup()
, чтобы очистка, зарегистрированная в методеsetUp()
, вызывалась передTestContextDecorator.disable()
.SessionMiddleware
теперь вызывает исключениеSessionInterrupted
вместоSuspiciousOperation
, когда сессия уничтожается в параллельном запросе.Оператор равенства
django.db.models.Field
теперь правильно различает наследуемые экземпляры полей в разных моделях. Кроме того, теперь определен порядок следования таких полей.Недокументированная функция
django.core.files.locks.lock()
теперь возвращаетFalse
, если файл не может быть заблокирован, вместо того, чтобы вызыватьBlockingIOError
.Механизм сброса пароля теперь аннулирует токены при изменении электронной почты пользователя.
Команда
makemessages
больше не обрабатывает неверные локали, указанные с помощью опцииmakemessages --locale
, если они содержат дефисы ('-'
).Поле формы
django.contrib.auth.forms.ReadOnlyPasswordHashField
теперь по умолчаниюdisabled
. ПоэтомуUserChangeForm.clean_password()
больше не требуется для возврата начального значения.Операции кэширования
cache.get_many()
,get_or_set()
,has_key()
,incr()
,decr()
,incr_version()
иdecr_version()
теперь правильно обрабатываютNone
, хранящиеся в кэше, так же, как и любое другое значение, вместо того, чтобы вести себя так, как будто ключ не существует.В связи с ограничением
python-memcached
предыдущее поведение сохраняется для устаревшего бэкендаMemcachedCache
.Минимальная поддерживаемая версия SQLite увеличена с 3.8.3 до 3.9.0.
CookieStorage
теперь хранит сообщения в RFC 6265 совместимом формате. Поддержка cookies, использующих старый формат, сохраняется до выхода Django 4.1.Минимальная поддерживаемая версия
asgiref
увеличена с 3.2.10 до 3.3.2.
Функции, устаревшие в версии 3.2¶
Разное¶
- Назначение объектов, не поддерживающих создание глубоких копий с помощью :py<<0 >>>, атрибутам класса в <<<1 >>> является устаревшим.
- Использование булевого значения в
BaseCommand.requires_system_checks
устарело. Используйте'__all__'
вместоTrue
, и[]
(пустой список) вместоFalse
. - Аргумент
whitelist
и атрибутdomain_whitelist
вEmailValidator
устарели. Используйтеallowlist
вместоwhitelist
, иdomain_allowlist
вместоdomain_whitelist
. Возможно, вам придется переименоватьwhitelist
в существующих миграциях. - Переменная конфигурации приложения
default_app_config
устарела из-за автоматического обнаруженияAppConfig
. См. раздел Что нового в Django 3.2 для более подробной информации. - Автоматический вызов
repr()
на кверисете вTransactionTestCase.assertQuerysetEqual()
, когда сравниваются строковые значения, является устаревшим. Если вам нужно прежнее поведение, явно установитеtransform
вrepr
. - Бэкенд
django.core.cache.backends.memcached.MemcachedCache
устарел, посколькуpython-memcached
имеет некоторые проблемы и, похоже, не поддерживается. Вместо него используйтеdjango.core.cache.backends.memcached.PyMemcacheCache
илиdjango.core.cache.backends.memcached.PyLibMCCache
. - Формат сообщений, используемый
django.contrib.messages.storage.cookie.CookieStorage
, отличается от формата, генерируемого старыми версиями Django. Поддержка старого формата сохраняется до версии Django 4.1.