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

4 августа 2020 г.

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

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

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

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

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

Что нового в Django 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настройки

Новая DEFAULT_HASHING_ALGORITHMпереходная настройка позволяет указать алгоритм хеширования по умолчанию, который будет использоваться для кодирования файлов cookie, токенов сброса пароля на сайте администратора, сеансов пользователей и подписей, созданных django.core.signing.Signerи django.core.signing.dumps().

Поддержка SHA-256 была добавлена ​​в Django 3.1. Если вы обновляете несколько экземпляров одного и того же проекта до Django 3.1, вы должны установить DEFAULT_HASHING_ALGORITHMего 'sha1'во время перехода, чтобы обеспечить совместимость со старыми версиями Django. Обратите внимание, что для этого требуется Django 3.1.1+. После завершения перехода на 3.1 вы можете прекратить переопределение DEFAULT_HASHING_ALGORITHM.

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

Незначительные особенности

django.contrib.admin

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

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

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

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

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

  • 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 увеличен с 180000 до 216000.
  • Новая 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_counterclockwiseсвойство.
  • 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

Кэш

  • cache_control()Декоратор и patch_cache_control()метод теперь поддерживают несколько имен полей в no-cacheдирективе для Cache-Controlзаголовка, в соответствии сRFC 7234 # section-5.2.2.2 .
  • delete()now возвращается, Trueесли ключ был успешно удален, в Falseпротивном случае.

CSRF

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

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

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

Файловое хранилище

  • FileSystemStorage.save()метод теперь поддерживает pathlib.Path.
  • FileFieldи ImageFieldтеперь примите callable for storage. Это позволяет вам изменять используемое хранилище во время выполнения, например, выбирая разные хранилища для разных сред.

Формы

  • 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 --databasedatabaseDATABASESdatabase
  • Новая опция заставляет команду завершать работу с ненулевым статусом при обнаружении непримененных миграций.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+,
    • analyze вариант в MySQL 8.0.18+ и MariaDB.
  • Добавлен, PositiveBigIntegerFieldкоторый действует так же, как a, PositiveIntegerFieldза исключением того, что допускает значения только в пределах определенного (зависящего от базы данных) предела. Значения от 0до 9223372036854775807безопасны во всех базах данных, поддерживаемых Django.
  • Новая RESTRICTопция для on_deleteаргумента ForeignKeyи OneToOneFieldимитирует поведение ограничения SQL .ON DELETE RESTRICT
  • CheckConstraint.check теперь поддерживает логические выражения.
  • В 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 теперь помечены как deterministicв Python 3.8+. Это позволяет использовать их в проверочных ограничениях и частичных индексах.
  • Новый UniqueConstraint.deferrableатрибут позволяет создавать отложенные уникальные ограничения.

Пагинация

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

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

  • Если ALLOWED_HOSTSпусто и DEBUG=True, теперь в Hostзаголовке разрешены поддомены localhost , например static.localhost.
  • HttpResponse.set_cookie()и HttpResponse.set_signed_cookie() теперь разрешите использование samesite='None'(string), чтобы явно указать, что файл cookie отправляется со всеми запросами на одном сайте и между сайтами.
  • Новый HttpRequest.accepts()метод возвращает, принимает ли запрос данный тип MIME в соответствии с Acceptзаголовком HTTP.

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

  • Теперь 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настройка тестовой базы данных позволяет отключить миграции во время создания тестовой базы данных.
  • Средство выполнения тестов Django теперь поддерживает возможность отмены вывода при прохождении тестов.test --buffer
  • DiscoverRunnerтеперь пропускает запуск системных проверок для баз данных, на которые не ссылаются тесты .
  • TransactionTestCaseРазборка MySQL теперь выполняется быстрее из-за flushулучшений команд. В качестве побочного эффекта последний больше не сбрасывает автоматически последовательности при разрыве. Включите, TransactionTestCase.reset_sequencesесли для ваших тестов требуется эта функция.

URL-адреса

  • Конвертеры Путь теперь можно поднять ValueErrorвto_url()не указать ни одного совпадения при движении задним ходом URL.

Утилиты

Разное

  • Серверная часть 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когда USE_TZесть True в базах данных, время поддержки зон. Раньше это было Noneв базах данных, поддерживающих часовые пояса.
  • 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()представления, теперь основана на Acceptзаголовке HTTP, а не на X-Requested-Withналичии заголовка HTTP.
  • Импорт совместности django.core.exceptions.EmptyResultSetв django.db.models.query, django.db.models.sqlи django.db.models.sql.datastructuresудаляются.
  • Импорт совместимости django.core.exceptions.FieldDoesNotExistin 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_NAMEin django.contrib.adminудален.
  • Параметры STATIC_URLи MEDIA_URL, заданные для относительных путей, теперь имеют префикс предоставленного сервером значения SCRIPT_NAME(или, /если он не установлен). Это изменение не должно влиять на настройки, установленные для действительных URL-адресов или абсолютных путей.
  • ConditionalGetMiddlewareбольше не добавляет ETagзаголовок к ответам с пустым content.
  • django.utils.decorators.classproperty()decorator становится общедоступным и перемещается в django.utils.functional.classproperty().
  • floatformatшаблонный фильтр теперь выводит (положительный) 0для отрицательных чисел, которые округляются до нуля.
  • Meta.orderingа Meta.unique_together параметры моделей в django.contribмодулях, которые раньше были кортежами, теперь являются списками.
  • Виджет календаря администратора теперь обрабатывает двузначные годы в соответствии со спецификацией Open Group, т.е. значения от 69 до 99 сопоставлены с предыдущим столетием, а значения от 0 до 68 сопоставлены с текущим столетием.
  • Форматы только для даты удалены из списка по умолчанию для DATETIME_INPUT_FORMATS.
  • Не FileInputвиджет больше не делает с requiredатрибутом HTML , когда существует исходные данные.
  • Недокументированный django.views.debug.ExceptionReporterFilterкласс удаляется. В соответствии с документацией по пользовательским отчетам об ошибках классы, которые будут использоваться с DEFAULT_EXCEPTION_REPORTER_FILTERнеобходимостью наследования django.views.debug.SafeExceptionReporterFilter.
  • Тайм-аут кеширования, установленный cache_page() декоратором, теперь имеет приоритет над max-ageдирективой из Cache-Controlзаголовка.
  • ForeignKey.to_field Теперь возникает вопрос о добавлении нелокального удаленного поля в аргумент FieldError.
  • SECURE_REFERRER_POLICYтеперь по умолчанию 'same-origin'. Дополнительные сведения см. В разделе «Новые возможности безопасности» выше.
  • checkКоманда управления теперь запускает databaseсистемные проверки только для псевдонимов базы данных, указанных с помощью option.check --database
  • migrateКоманда управления теперь запускает databaseсистемные проверки только для базы данных, которую нужно перенести.
  • Классы администратора CSS row1и row2удаляются в пользу :nth-child(odd)и :nth-child(even)псевдо-классов.
  • Теперь make_password()функция требует, чтобы ее аргумент был строкой или байтами. Другие типы должны быть явно приведены к одному из них.
  • Недокументированный versionпараметр AsKMLфункции удаляется.
  • Используемые ими сериализаторы JSON и YAMLdumpdata теперь по умолчанию выгружают все данные с помощью 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 %}unlocalizeDECIMAL_SEPARATOR
  • Минимальная поддерживаемая версия asgirefувеличена с 3.2 до 3.2.10.
  • Класс Media теперь отображает <script>теги без typeатрибута, чтобы следовать рекомендациям WHATWG .
  • ModelChoiceIterator, используемый ModelChoiceFieldи ModelMultipleChoiceField, теперь дает выбор из двух кортежей, содержащий ModelChoiceIteratorValueэкземпляры в качестве первого valueэлемента в каждом выборе. В большинстве случаев это прокси прозрачно, но если вам нужно само fieldзначение, используйте 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символы s, 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()метод, если ваш код зависит от клиентского AcceptHTTP-заголовка.

    Если вы пишете свой собственный метод обнаружения 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вместо этого заранее передать псевдонимы в .

  • Поле NullBooleanFieldмодели устарело и заменено на BooleanField(null=True).

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

  • В и шаблонные теги являются устаревшими в пользу . охватывает все варианты использования, но если вам нужно продолжать использовать эти теги, их можно извлечь из Django в модуль и включить в качестве встроенного тега в параметр в .{% ifequal %}{% ifnotequal %}{% if %}{% if %}'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()Метод требует в requestкачестве первого позиционного аргумента.
  • Поддержка SimpleTestCase.allow_database_queriesи TransactionTestCase.multi_dbудалена.

Copyright ©2021 All rights reserved