Примечания к выпуску Django 3.2 ¶
6 апреля 2021 г.
Добро пожаловать в Django 3.2!
Эти примечания к выпуску охватывают новые функции , а также некоторые обратно несовместимые изменения, о которых вам нужно знать при обновлении с Django 3.1 или более ранней версии. Мы начали процесс прекращения поддержки некоторых функций .
См. Руководство по обновлению Django до более новой версии, если вы обновляете существующий проект.
Django 3.2 обозначен как выпуск с долгосрочной поддержкой . Он будет получать обновления безопасности в течение как минимум трех лет после выпуска. Поддержка предыдущего LTS, Django 2.2, прекратится в апреле 2022 года.
Совместимость с Python ¶
Django 3.2 поддерживает Python 3.6, 3.7, 3.8 и 3.9. Мы настоятельно рекомендуем и официально поддерживаем только последний выпуск каждой серии.
Что нового в Django 3.2 ¶
Автоматическое AppConfig
обнаружение ¶
Большинство подключаемых приложений определяют AppConfig
подкласс в apps.py
подмодуле. Многие определяют default_app_config
переменную, указывающую на этот класс, в своих файлах __init__.py
.
Когда 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
. Начиная с DEFAULT_AUTO_FIELD
версии 3.2 новые проекты создаются со значением
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
.
Функциональные показатели ¶
Новый *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 или выше. Подробнее см. Документацию по кешированию в 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 МБ. Это все еще довольно консервативно, но может привести к проблемам в средах с ограниченным объемом памяти. В этом случае существующий хешер можно разделить на подклассы, чтобы переопределить значения по умолчанию.Энтропия соли по умолчанию для хешеров паролей Argon2, MD5, PBKDF2, SHA-1 увеличена с 71 до 128 бит.
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
атрибут определяет порядок агрегированных элементов. - Новый
JSONBAgg.distinct
атрибут определяет, будут ли агрегированные значения отличаться друг от друга. - Теперь
CreateExtension
операция проверяет, что расширение уже существует в базе данных, и пропускает миграцию, если это так. - Новые
CreateCollation
иRemoveCollation
операции позволяют создавать и сбросив на PostgreSQL сортировки. Дополнительные сведения см. В разделе « Управление сопоставлениями с помощью миграции» . - Поиск на
ArrayField
данный момент разрешает ( невложенные ) массивы, содержащие выражения в качестве правых частей. - Новое
OpClass()
выражение позволяет создавать функциональные индексы для выражений с пользовательским классом операторов. См. Функциональные индексы для более подробной информации.
django.contrib.sitemaps
¶
- Новые
Sitemap
атрибутыalternates
,languages
иx_default
позволяет генерировать карту сайта чередуется локализованные версии ваших страниц.
django.contrib.syndication
¶
- Новый
item_comments
хук позволяет указывать URL комментариев для каждого элемента фида.
Бэкэнды базы данных ¶
- Сторонние серверные части баз данных теперь могут пропускать или отмечать ожидаемые отказы в тестовом наборе Django с помощью атрибутов new
DatabaseFeatures.django_test_skips
иdjango_test_expected_failures
.
Декораторы ¶
- Новый
no_append_slash()
декоратор позволяет исключить отдельные представления изAPPEND_SLASH
нормализации URL.
Отчеты об ошибках ¶
- Пользовательские
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
свойство позволяет указать фрагмент имени файла, который будет использоваться для наименования миграции, содержащей только эту операцию. - Миграции теперь поддерживают сериализацию чистых и конкретных объектов пути из
экземпляров
pathlib
иos.PathLike
экземпляров.
Модели ¶
- Новый
no_key
параметр forQuerySet.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()
Выражение теперь автоматически разрешает егоoutput_field
к соответствующемуField
подклассу на основе типа ее при условии ,value
дляbool
,bytes
,float
,int
,str
,datetime.date
,datetime.datetime
,datetime.time
,datetime.timedelta
,decimal.Decimal
, иuuid.UUID
экземпляров. Как следствие, разрешениеoutput_field
для функций базы данных и комбинированных выражений теперь может аварийно завершить работу со смешанными типами при использованииValue()
. Вoutput_field
таких случаях вам нужно будет явно указать .- Новый
QuerySet.alias()
метод позволяет создавать многоразовые псевдонимы для выражений, которые не нужно выбирать, но используются для фильтрации, упорядочивания или как часть сложных выражений. - Новая
Collate
функция позволяет фильтровать и упорядочивать по заданным параметрам сортировки базы данных. field_name
АргументQuerySet.in_bulk()
теперь принимает различные поля , если есть только одно поле указано вQuerySet.distinct()
.- Новый
tzinfo
параметр функцийTruncDate
иTruncTime
базы данных позволяет обрезать дату и время в определенном часовом поясе. - Новый
db_collation
аргумент дляCharField
иTextField
позволяет установить параметры сортировки базы данных для поля. - Добавлена
Random
функция базы данных. - Функции агрегирования ,
F()
,OuterRef()
и другие выражения позволяют теперьпомощью преобразования. Подробнее см. Выражения могут ссылаться на преобразования . - Новый
durable
аргумент дляatomic()
гарантии того, что изменения, внесенные в атомарный блок, будут зафиксированы, если блок завершится без ошибок. Вложенный атомарный блок, помеченный как надежный, вызовет расширениеRuntimeError
. - Добавлена
JSONObject
функция базы данных.
Пагинация ¶
- Новый
django.core.paginator.Paginator.get_elided_page_range()
метод позволяет сгенерировать диапазон страниц без некоторых значений. Если существует большое количество страниц, это может быть полезно для создания разумного количества ссылок на страницы в шаблоне.
Запросы и ответы ¶
- Заголовки ответов теперь хранятся в файлах
HttpResponse.headers
. Его можно использовать вместо оригинального dict-подобного интерфейса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
активной локали.- Шаблоны, кэшированные с помощью кэшированных загрузчиков шаблонов , теперь корректно перезагружаются в процессе разработки.
Тесты ¶
- Объекты, назначенные атрибутам класса в
TestCase.setUpTestData()
, теперь изолированы для каждого метода тестирования. Такие объекты теперь требуются для поддержки создания глубоких копий с помощьюcopy.deepcopy()
. Назначение неподдерживаемых объектовdeepcopy()
устарело и будет удалено в Django 4.1. DiscoverRunner
теперьfaulthandler
по умолчанию включен. Это можно отключить с помощью опции.test --no-faulthandler
DiscoverRunner
а командаtest
управления теперь может отслеживать время, включая настройку базы данных и общее время выполнения. Это можно включить с помощью опции.test --timing
Client
теперь сохраняет строку запроса при выполнении переадресации 307 и 308.- Новый
TestCase.captureOnCommitCallbacks()
метод фиксирует функции обратного вызова, передаваемыеtransaction.on_commit()
в список. Это позволяет вам тестировать такие обратные вызовы, не используя более медленныйTransactionTestCase
. TransactionTestCase.assertQuerysetEqual()
теперь поддерживает прямое сравнение с другим набором запросов, а не ограничивается сравнением со списком строковых представлений объектов при использовании значения по умолчанию дляtransform
аргумента.
Утилиты ¶
- Новый
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 или setDatabaseFeatures.supports_collation_on_charfield
andDatabaseFeatures.supports_collation_on_textfield
toFalse
. Если недетерминированные сопоставления не поддерживаются, установите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
. - Новое универсальное представление администратора нарушит шаблоны URL-адресов, маршрутизируемые после URL-адресов администратора и соответствующие префиксу URL-адреса администратора. Вы можете настроить порядок URL или, в случае необходимости, установить
AdminSite.final_catch_all_view
наFalse
отключение приема всей точки зрения. Подробнее см. Что нового в 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()
теперь удаляет начальные и конечные дефисы и подчеркивания.Эти
intcomma
иintword
фильтры шаблонов больше не зависит отUSE_L10N
настройки.Поддержка
argon2-cffi
<19.1.0 удалена.Ключи кеша больше не включают язык, когда интернационализация отключена ( ) и включена локализация ( ). После обновления до Django 3.2 в таких конфигурациях первым запросом на любое ранее закешированное значение будет промах в кеше.
USE_I18N = False
USE_L10N = True
ForeignKey.validate()
теперь использует,_base_manager
а не_default_manager
проверяет наличие связанных экземпляров.Когда приложение определяет
AppConfig
подкласс вapps.py
подмодуле, Django теперь автоматически использует эту конфигурацию, даже если она не включена вdefault_app_config
. Установите в подклассе, если вам нужно предотвратить такое поведение. Подробнее см. Что нового в Django 3.2 .default = False
AppConfig
Теперь возникает необходимость создания абстрактной модели
TypeError
.Аргументы
setup_databases()
ключевого слова для теперь содержат только ключевые слова.Недокументированная
django.utils.http.limited_parse_qsl()
функция удалена. Пожалуйста, используйтеurllib.parse.parse_qsl()
вместо этого.django.test.utils.TestContextDecorator
now использует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 . Поддержка файлов cookie, использующих старый формат, сохраняется до Django 4.1.Минимальная поддерживаемая версия
asgiref
увеличена с 3.2.10 до 3.3.2.
Функции, устаревшие в версии 3.2 ¶
Разное ¶
- Назначение объектов, которые не поддерживают создание глубоких копий с помощью
copy.deepcopy()
атрибутов классаTestCase.setUpTestData()
, устарело. - Использование логического значения в
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. Поддержка старого формата сохраняется до Django 4.1.