Примечания к выпуску Django 2.0 ¶
2 декабря 2017 г.
Добро пожаловать в Django 2.0!
Эти примечания к выпуску охватывают новые функции , а также некоторые обратно несовместимые изменения, о которых вам нужно знать при обновлении с Django 1.11 или более ранней версии. Мы отказались от некоторых функций , срок действия которых подошел к концу, и мы начали процесс прекращения поддержки некоторых функций .
В этом выпуске Django начинает использовать свободную форму семантического управления версиями , но никаких серьезных обратно несовместимых изменений, которые можно было бы ожидать от выпуска 2.0, не произошло. Обновление должно быть таким же трудоемким, как и предыдущие выпуски функций.
См. Руководство по обновлению Django до более новой версии, если вы обновляете существующий проект.
Совместимость с Python ¶
Django 2.0 поддерживает Python 3.4, 3.5, 3.6 и 3.7. Мы настоятельно рекомендуем и официально поддерживаем только последний выпуск каждой серии.
Серия Django 1.11.x - последняя, поддерживающая Python 2.7.
Django 2.0 будет последней серией выпусков, поддерживающих Python 3.4. Если вы планируете развертывание Python 3.4 после окончания жизненного цикла Django 2.0 (апрель 2019 г.), вместо этого придерживайтесь Django 1.11 LTS (поддерживается до апреля 2020 г.). Однако обратите внимание, что срок службы Python 3.4 истечет в марте 2019 года.
Поддержка сторонних библиотек для более старой версии Django ¶
После выпуска Django 2.0 мы предлагаем сторонним авторам приложений отказаться от поддержки всех версий Django до 1.11. В то время вы должны иметь возможность запускать тесты вашего пакета, чтобы появлялись предупреждения об устаревании. После исправления предупреждений об устаревании ваше приложение должно быть совместимо с Django 2.0.python -Wd
Что нового в Django 2.0 ¶
Упрощенный синтаксис маршрутизации URL ¶
Новая django.urls.path()
функция позволяет использовать более простой и понятный синтаксис маршрутизации URL-адресов. Например, этот пример из предыдущих выпусков Django:
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
можно было бы записать как:
path('articles/<int:year>/', views.year_archive),
Новый синтаксис поддерживает приведение типов параметров URL. В этом примере представление получит year
аргумент ключевого слова как целое число, а не как строку. Кроме того, URL-адреса, которые будут соответствовать, немного менее ограничены в перезаписанном примере. Например, 10000 год теперь будет соответствовать, поскольку целые числа года не ограничены точностью до четырех цифр, как в регулярном выражении.
django.conf.urls.url()
Функция из предыдущих версий теперь доступна django.urls.re_path()
. Старое расположение остается для обратной совместимости без неминуемого прекращения поддержки. Старая
django.conf.urls.include()
функция теперь может быть импортирована из, django.urls
поэтому вы можете использовать ее в своих URLconfs.from django.urls import include, path, re_path
Документ диспетчера URL-адресов переписан с учетом нового синтаксиса и более подробной информации.
Мобильный дружественных contrib.admin
¶
Администратор теперь реагирует и поддерживает все основные мобильные устройства. Старые браузеры могут испытывать различные уровни постепенной деградации.
Оконные выражения ¶
Новое Window
выражение позволяет добавлять OVER
предложение в наборы запросов. В выражении можно использовать оконные функции и агрегатные функции .
Незначительные особенности ¶
django.contrib.admin
¶
- Новый
ModelAdmin.autocomplete_fields
атрибут иModelAdmin.get_autocomplete_fields()
метод позволяют использовать виджет поиска Select2 дляForeignKey
иManyToManyField
.
django.contrib.auth
¶
- Счетчик итераций по умолчанию для хешера паролей PBKDF2 увеличен с 36 000 до 100 000.
django.contrib.gis
¶
- Добавлена поддержка MySQL для
AsGeoJSON
функции,GeoHash
функции,IsValid
функции,isvalid
поиска и поиска расстояния . - Добавлены
Azimuth
иLineLocatePoint
функции, поддерживаемые на PostGIS и SpatiaLite. - Для любого
GEOSGeometry
импортированного из GeoJSON теперь установлен SRID. - Добавлен
OSMWidget.default_zoom
атрибут для настройки уровня масштабирования карты по умолчанию. - Сделаны метаданные для чтения и редактирования на растрах через
metadata
,info
иmetadata
атрибуты. - Разрешена передача параметров создания конкретного драйвера
GDALRaster
объектам, использующимpapsz_options
. - Разрешено создание
GDALRaster
объектов во внутренней виртуальной файловой системе GDAL. Теперь растры можно создавать и преобразовывать в двоичные данные в памяти. - Новый
GDALBand.color_interp()
метод возвращает цветовую интерпретацию полосы.
django.contrib.postgres
¶
- Новый
distinct
аргумент дляArrayAgg
определяет, будут ли объединенные значения отличаться друг от друга. - Новая
RandomUUID
функция базы данных возвращает UUID версии 4. Это требует использованияpgcrypto
расширения PostgreSQL, которое можно активировать с помощью новойCryptoExtension
операции миграции. django.contrib.postgres.indexes.GinIndex
теперь поддерживаетfastupdate
иgin_pending_list_limit
параметры.- Новый
GistIndex
класс позволяет создаватьGiST
индексы в базе данных. НоваяBtreeGistExtension
операция миграции устанавливаетbtree_gist
расширение, чтобы добавить поддержку для классов операторов, которые не являются встроенными. inspectdb
теперь может самоанализJSONField
и различныеRangeField
s (django.contrib.postgres
должны быть вINSTALLED_APPS
).
django.contrib.sitemaps
¶
- В конструктор добавлен
protocol
аргумент ключевого словаGenericSitemap
.
Кэш ¶
cache.set_many()
теперь возвращает список ключей, которые не удалось вставить. Для встроенных серверных модулей неудачные вставки могут происходить только в memcached.
Файловое хранилище ¶
File.open()
может использоваться как менеджер контекста, например .with file.open() as f:
Формы ¶
- Новые
date_attrs
иtime_attrs
аргументы дляSplitDateTimeWidget
иSplitHiddenDateTimeWidget
позволяют указывать различные атрибуты HTML дляDateInput
иTimeInput
(или скрытых) подвиджетов. - Новый
Form.errors.get_json_data()
метод возвращает ошибки формы в виде словаря, подходящего для включения в ответ JSON.
Общие представления ¶
- Новый
ContextMixin.extra_context
атрибут позволяет добавлять контекст вView.as_view()
.
Команды управления ¶
inspectdb
теперь переводит беззнаковые целочисленные столбцы MySQL вPositiveIntegerField
илиPositiveSmallIntegerField
.- Новая опция управляет форматом комментариев в файлах PO.
makemessages --add-location
loaddata
теперь можно читать из стандартного ввода .- Новая опция позволяет отформатировать вывод в едином формате сравнения.
diffsettings --output
- В Oracle
inspectdb
теперь можно самоанализироватьAutoField
, создан ли столбец как столбец идентификации. - В MySQL
dbshell
теперь поддерживаются сертификаты TLS на стороне клиента.
Миграции ¶
- Новая опция позволяет назвать сжатую миграцию.
squashmigrations --squashed-name
Модели ¶
- Новая
StrIndex
функция базы данных находит начальный индекс строки внутри другой строки. - В Oracle
AutoField
иBigAutoField
теперь создаются как столбцы идентификации . - Новый
chunk_size
параметрQuerySet.iterator()
контролирует количество строк, извлекаемых клиентом базы данных Python при потоковой передаче результатов из базы данных. Для баз данных, которые не поддерживают курсоры на стороне сервера, он контролирует количество результатов, которые Django извлекает из адаптера базы данных. QuerySet.earliest()
,,QuerySet.latest()
иMeta.get_latest_by
теперь позволяют упорядочивать по нескольким полям.- Добавлена
ExtractQuarter
функция для извлечения четверти изDateField
иDateTimeField
и представлена черезquarter
поиск. - Добавлена
TruncQuarter
функция усеченияDateField
иDateTimeField
первого дня квартала. - Добавлен
db_tablespace
параметр в индексы на основе классов. - Если база данных поддерживает собственное поле продолжительности (Oracle и PostgreSQL),
Extract
теперь работает сDurationField
. - Добавлен
of
аргументQuerySet.select_for_update()
, поддерживаемый в PostgreSQL и Oracle, для блокировки только строк из определенных таблиц, а не всех выбранных таблиц. Это может быть полезно, особенно когдаselect_for_update()
используется вместе сselect_related()
. - Новый
field_name
параметрQuerySet.in_bulk()
позволяет получать результаты на основе любого уникального поля модели. CursorWrapper.callproc()
теперь принимает необязательный словарь параметров ключевых слов, если бэкэнд поддерживает эту функцию. Из встроенных серверных модулей Django только Oracle поддерживает его.- Новый
connection.execute_wrapper()
метод позволяет устанавливать оболочки вокруг выполнения запросов к базе данных . - Новый
filter
аргумент для встроенных агрегатов позволяет добавлять разные условные выражения к множеству агрегатов по одним и тем же полям или отношениям. - Добавлена поддержка выражений в
Meta.ordering
. - Новый
named
параметрQuerySet.values_list()
позволяет получать результаты в виде именованных кортежей. - Новый
FilteredRelation
класс позволяет добавлятьON
предложение в наборы запросов.
Пагинация ¶
- Добавлен
Paginator.get_page()
для обеспечения документированного шаблона обработки неверных номеров страниц.
Шаблоны ¶
- Чтобы повысить полезность
Engine.get_default()
сторонних приложений, теперь он возвращает первый движок, еслиDjangoTemplates
настроено несколько движков,TEMPLATES
а не поднимаетсяImproperlyConfigured
. - Пользовательские теги шаблонов теперь могут принимать аргументы, содержащие только ключевые слова.
Тесты ¶
- Добавлена поддержка потоковой передачи в
LiveServerTestCase
. - Добавлены настройки , которые позволяют задать параметры тестирования табличного пространства для Oracle:
DATAFILE_SIZE
,DATAFILE_TMP_SIZE
,DATAFILE_EXTSIZE
, иDATAFILE_TMP_EXTSIZE
.
Валидаторы ¶
- Новое
ProhibitNullCharactersValidator
запрещает нулевой символ во вводе поляCharField
формы и его подклассов. Инструменты сканирования уязвимостей наблюдали ввод нулевого символа. Большинство баз данных молча отбрасывают нулевые символы, но psycopg2 2.7+ вызывает исключение при попытке сохранить нулевой символ в поле типа char / text с PostgreSQL.
Обратно несовместимые изменения в 2.0 ¶
Удалена поддержка байтовых строк в некоторых местах ¶
Для поддержки собственных строк Python 2 более старые версии Django должны были принимать как строки байтов, так и строки Unicode. Теперь, когда поддержка Python 2 прекращена, байтовые строки должны встречаться только вокруг границ ввода / вывода (например, обработка двоичных полей или HTTP-потоков). Возможно, вам придется обновить свой код, чтобы ограничить использование байтовых строк до минимума, поскольку Django больше не принимает байтовые строки в определенных путях кода. -b
Опция Python может помочь обнаружить эту ошибку в вашем коде.
Например, reverse()
теперь str()
вместо force_text()
принуждения используется, args
и kwargs
он получает до их размещения в URL-адресе. Для байтовых строк это создает строку с нежелательным b
префиксом, а также дополнительные кавычки ( str(b'foo')
есть "b'foo'"
). Для адаптации вызовите
decode()
байтовую строку перед ее передачей в reverse()
.
API серверной части базы данных ¶
В этом разделе описаны изменения, которые могут потребоваться в сторонних серверах баз данных.
DatabaseOperations.datetime_cast_date_sql()
,datetime_cast_time_sql()
,datetime_trunc_sql()
,datetime_extract_sql()
, Иdate_interval_sql()
методы теперь возвращают только SQL для выполнения операции вместо SQL и список параметров.- Сторонние серверные части баз данных должны добавить
DatabaseWrapper.display_name
атрибут с именем базы данных, с которой работает ваш сервер. Django может использовать его в различных сообщениях, например, при проверке системы. - Первый аргумент
SchemaEditor._alter_column_type_sql()
- это сейчас,model
а неtable
. - Первый аргумент
SchemaEditor._create_index_name()
- это сейчас,table_name
а неmodel
. - Чтобы включить поддержку, установите
. Если база данных требует, чтобы аргументы были столбцами, а не таблицами, установите
.
FOR UPDATE OF
DatabaseFeatures.has_select_for_update_of = True
OF
DatabaseFeatures.select_for_update_of_column = True
- Чтобы включить поддержку
Window
выражений, установитеDatabaseFeatures.supports_over_clause
значениеTrue
. Возможно, вам потребуется настроить методыDatabaseOperations.window_start_rows_start_end()
и / илиwindow_start_range_start_end()
. - Сторонние серверные части базы данных должны добавить
DatabaseOperations.cast_char_field_without_max_length
атрибут с типом данных базы данных, который будет использоваться вCast
функции для a,CharField
еслиmax_length
аргумент не указан. - Первым аргументом
DatabaseCreation._clone_test_db()
иget_test_db_clone_settings()
является now,suffix
а неnumber
(в случае, если вы хотите переименовать подписи в вашем бэкэнде для единообразия).django.test
также теперь передает эти значения как строки, а не как целые числа. - Сторонние серверные части баз данных должны добавить
DatabaseIntrospection.get_sequences()
метод, основанный на заглушке вBaseDatabaseIntrospection
.
Прекращена поддержка Oracle 11.2 ¶
Окончание восходящей поддержки Oracle 11.2 - декабрь 2020 г. Django 1.11 будет поддерживаться до апреля 2020 г., который почти достигает этой даты. Django 2.0 официально поддерживает Oracle 12.1+.
Уровень изоляции MySQL по умолчанию - чтение зафиксировано ¶
Уровень изоляции MySQL по умолчанию, повторяющееся чтение, может вызвать потерю данных при типичном использовании Django. Чтобы предотвратить это и обеспечить согласованность с другими базами данных, уровень изоляции по умолчанию теперь считается подтвержденным. При необходимости вы можете использовать этот
DATABASES
параметр, чтобы использовать другой уровень изоляции .
AbstractUser.last_name
max_length
увеличена до 150 ¶
Перенос для django.contrib.auth.models.User.last_name
включен. Если у вас есть настраиваемая пользовательская модель, наследующая от AbstractUser
, вам необходимо создать и применить миграцию базы данных для вашей пользовательской модели.
Если вы хотите сохранить ограничение в 30 символов для фамилий, используйте настраиваемую форму:
from django.contrib.auth.forms import UserChangeForm
class MyUserChangeForm(UserChangeForm):
last_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)
QuerySet.reverse()
и last()
запрещены после нарезки ¶
Вызов QuerySet.reverse()
или last()
на срезанном наборе запросов приводит к неожиданным результатам из-за применения среза после переупорядочения. Сейчас это запрещено, например:
>>> Model.objects.all()[:2].reverse()
Traceback (most recent call last):
...
TypeError: Cannot reverse a query once a slice has been taken.
Поля формы больше не принимают необязательные аргументы в качестве позиционных аргументов ¶
Чтобы предотвратить ошибки времени выполнения из-за неправильного порядка аргументов полей формы, необязательные аргументы встроенных полей формы больше не принимаются в качестве позиционных аргументов. Например:
forms.IntegerField(25, 10)
вызывает исключение и должно быть заменено на:
forms.IntegerField(max_value=25, min_value=10)
call_command()
проверяет полученные параметры ¶
call_command()
теперь проверяет, что синтаксический анализатор аргументов вызываемой команды определяет все переданные параметры call_command()
.
Для настраиваемых команд управления, которые используют параметры, не созданные с помощью
parser.add_argument()
, добавьте stealth_options
атрибут в команду:
class MyCommand(BaseCommand):
stealth_options = ('option_name', ...)
Индексы больше не принимают позиционные аргументы ¶
Например:
models.Index(['headline', '-pub_date'], 'index_name')
вызывает исключение и должно быть заменено на:
models.Index(fields=['headline', '-pub_date'], name='index_name')
Ограничения внешнего ключа теперь включены в SQLite ¶
Это будет отображаться как обратная несовместимость change ( ) при попытке сохранить существующий экземпляр модели, который нарушает ограничение внешнего ключа.IntegrityError:
FOREIGN KEY constraint failed
Внешние ключи теперь создаются с использованием вместо
. Таким образом, может потребоваться перестройка таблиц для воссоздания внешних ключей с новым определением, особенно если вы используете такой шаблон:DEFERRABLE INITIALLY DEFERRED
DEFERRABLE IMMEDIATE
from django.db import transaction
with transaction.atomic():
Book.objects.create(author_id=1)
Author.objects.create(id=1)
Если вы не воссоздадите внешний ключ как DEFERRED
, первый create()
не удастся теперь, когда ограничения внешнего ключа применяются.
Сначала сделайте резервную копию своей базы данных! После обновления до Django 2.0 вы можете перестроить таблицы, используя сценарий, подобный этому:
from django.apps import apps
from django.db import connection
for app in apps.get_app_configs():
for model in app.get_models(include_auto_created=True):
if model._meta.managed and not (model._meta.proxy or model._meta.swapped):
for base in model.__bases__:
if hasattr(base, '_meta'):
base._meta.local_many_to_many = []
model._meta.local_many_to_many = []
with connection.schema_editor() as editor:
editor._remake_table(model)
Этот скрипт не прошел тщательного тестирования и нуждается в адаптации для различных случаев, например для нескольких баз данных. Не стесняйтесь вносить улучшения.
Кроме того, из - за стола переделки ограничения SQLite, это запрещено выполнять RenameModel
и
RenameField
операции на модели или поля , на которые ссылается другими моделями в сделке. Чтобы разрешить применение миграций, содержащих эти операции, вы должны установить для
Migration.atomic
атрибута значение False
.
Разное ¶
SessionAuthenticationMiddleware
Класс удаляется. Он не предоставлял никаких функций, поскольку аутентификация сеанса безусловно включена в Django 1.10.Обработчики ошибок HTTP по умолчанию (
handler404
и т. Д.) Теперь являются вызываемыми вместо строк пути Python с точками. Django отдает предпочтение вызываемым ссылкам, поскольку они обеспечивают лучшую производительность и удобство отладки.RedirectView
больше не заглушает,NoReverseMatch
еслиpattern_name
не существует.Когда
USE_L10N
выключен,FloatField
аDecimalField
теперь уважаюDECIMAL_SEPARATOR
иTHOUSAND_SEPARATOR
во время валидации. Например, с настройками:USE_L10N = False USE_THOUSAND_SEPARATOR = True DECIMAL_SEPARATOR = ',' THOUSAND_SEPARATOR = '.'
"1.345"
теперь ввод преобразуется в1345
вместо1.345
.Подклассы
AbstractBaseUser
больше не требуются для реализацииget_short_name()
иget_full_name()
. (Базовые реализации, которые вызывают повышениеNotImplementedError
, удаляются.)django.contrib.admin
Использует эти методы, если они реализованы, но не требует их. Сторонние приложения, использующие эти методы, могут захотеть применить аналогичный подход.FIRST_DAY_OF_WEEK
ИNUMBER_GROUPING
настройка формата теперь хранятся в виде целых чисел в JavaScript и JSON просмотреть i18n выходов.assertNumQueries()
теперь игнорирует запросы конфигурации подключения. Раньше, если тест открывал новое соединение с базой данных, эти запросы могли быть включены как частьassertNumQueries()
подсчета.Размер по умолчанию тестового табличного пространства Oracle увеличен с 20M до 50M, а размер авторасширения по умолчанию увеличен с 10M до 25M.
Чтобы повысить производительность при потоковой передаче больших наборов результатов из базы данных,
QuerySet.iterator()
теперь выбирает 2000 строк за раз вместо 100. Старое поведение можно восстановить с помощьюchunk_size
параметра. Например:Book.objects.iterator(chunk_size=100)
Предоставление неизвестных имен пакетов в
packages
аргументеJavaScriptCatalog
представления теперь возникаетValueError
вместо передачи без уведомления.Первичный ключ экземпляра модели теперь отображается в
Model.__str__()
методе по умолчанию , например .Question object (1)
makemigrations
теперь обнаруживает изменения вlimit_choices_to
опции поля модели . Добавьте это к своим существующим миграциям или примите автоматически созданную миграцию для полей, которые его используют.Выполнение запросов, требующих автоматических пространственных преобразований, теперь возникает
NotImplementedError
в MySQL, вместо того, чтобы молча использовать непреобразованные геометрии.django.core.exceptions.DjangoRuntimeWarning
устранен. Он использовался только в бэкэнде кеша как промежуточный класс вCacheKeyWarning
наследованииRuntimeWarning
.Переименован
BaseExpression._output_field
вoutput_field
. Возможно, вам потребуется обновить пользовательские выражения.В более старых версиях формы и наборы форм объединяют их
Media
с виджетами, объединяя ихMedia
. Комбинирование теперь пытается сохранить относительный порядок элементов в каждом списке .MediaOrderConflictWarning
выдается, если заказ не может быть сохранен.django.contrib.gis.gdal.OGRException
устранен. Это псевдонимGDALException
с Django 1.8.Поддержка GEOS 3.3.x прекращена.
Способ выбора данных
GeometryField
изменен для повышения производительности, и в необработанных SQL-запросах эти поля теперь должны быть заключены в оболочкуconnection.ops.select
. См. Пример в примечании « Необработанные запросы» в руководстве по ГИС.
Функции, устаревшие в версии 2.0 ¶
context
аргумент Field.from_db_value()
и Expression.convert_value()
¶
context
Аргумент Field.from_db_value()
и
Expression.convert_value()
не используется , поскольку это всегда пустой словарь. Сигнатура обоих методов теперь:
(self, value, expression, connection)
вместо:
(self, value, expression, connection, context)
Поддержка старой подписи в настраиваемых полях и выражениях сохраняется до Django 3.0.
Разное ¶
django.db.backends.postgresql_psycopg2
Модуль является устаревшим в пользуdjango.db.backends.postgresql
. Это псевдоним с Django 1.9. Это влияет только на код, который напрямую импортируется из модуля. ЭтотDATABASES
параметр все еще можно использовать'django.db.backends.postgresql_psycopg2'
, хотя вы можете упростить его, используя'django.db.backends.postgresql'
имя, добавленное в Django 1.9.django.shortcuts.render_to_response()
устарел в пользуdjango.shortcuts.render()
.render()
принимает те же аргументы, за исключением того, что также требуетrequest
.- Эта
DEFAULT_CONTENT_TYPE
настройка устарела. Он плохо взаимодействует со сторонними приложениями и устарел, поскольку HTML5 в основном вытеснил XHTML. HttpRequest.xreadlines()
устарел в пользу повторения запроса.field_name
Ключевое слово аргументаQuerySet.earliest()
иQuerySet.latest()
осуждаются в пользу прохождения имен полей в качестве аргументов. Пишите.earliest('pub_date')
вместо.earliest(field_name='pub_date')
.
Функции, удаленные в 2.0 ¶
Эти функции достигли конца цикла устаревания и удалены в Django 2.0.
Подробную информацию об этих изменениях, в том числе о том, как отменить использование этих функций, см. В разделе « Функции, не рекомендуемые в версии 1.9» .
weak
Аргументdjango.dispatch.signals.Signal.disconnect()
удаляется.django.db.backends.base.BaseDatabaseOperations.check_aggregate_support()
устранен.django.forms.extras
Пакет удаляется.assignment_tag
Помощник удаляется.host
АргументSimpleTestCase.assertsRedirects()
удаляется. Уровень совместимости, позволяющий считать абсолютные URL-адреса равными относительным, когда путь идентичен, также удаляется.Field.rel
иField.remote_field.to
удаляются.on_delete
АргументForeignKey
иOneToOneField
теперь требуется в моделях и миграции. Рассмотрите возможность отказа от миграций, чтобы у вас было меньше их для обновления.django.db.models.fields.add_lazy_relation()
устранен.- Когда поддержка часовых поясов включена, серверные части базы данных, которые не поддерживают часовые пояса, больше не преобразуют известные значения даты и времени в наивные значения в формате UTC, когда такие значения передаются в качестве параметров SQL-запросам, выполняемым вне ORM, например, с помощью
cursor.execute()
. django.contrib.auth.tests.utils.skipIfCustomUser()
устранен.GeoManager
ИGeoQuerySet
классы удалены.django.contrib.gis.geoip
Модуль удаляется.- Убрана
supports_recursion
проверка загрузчиков шаблонов из:django.template.engine.Engine.find_template()
django.template.loader_tags.ExtendsNode.find_template()
django.template.loaders.base.Loader.supports_recursion()
django.template.loaders.cached.Loader.supports_recursion()
- В
load_template
иload_template_sources
методы шаблон погрузчика удаляются. template_dirs
Аргумент шаблона погрузчиков удаляются:django.template.loaders.base.Loader.get_template()
django.template.loaders.cached.Loader.cache_key()
django.template.loaders.cached.Loader.get_template()
django.template.loaders.cached.Loader.get_template_sources()
django.template.loaders.filesystem.Loader.get_template_sources()
django.template.loaders.base.Loader.__call__()
устранен.- Поддержка настраиваемых представлений ошибок, которые не принимают
exception
параметр, удалена. mime_type
Атрибутdjango.utils.feedgenerator.Atom1Feed
иdjango.utils.feedgenerator.RssFeed
удаляется.app_name
Аргументinclude()
удаляется.- Поддержка передачи 3-кортежа (включая
admin.site.urls
) в качестве первого аргументаinclude()
удалена. - Поддержка установки пространства имен экземпляра URL без пространства имен приложения удалена.
Field._get_val_from_obj()
устранен.django.template.loaders.eggs.Loader
устранен.current_app
Параметр сcontrib.auth
видом функции на основе удаляется.callable_obj
Ключевое слово аргументSimpleTestCase.assertRaisesMessage()
удаляется.- Поддержка
allow_tags
атрибута вModelAdmin
методах удалена. enclosure
Ключевое слово аргументSyndicationFeed.add_item()
удаляется.django.template.loader.LoaderOrigin
Иdjango.template.base.StringOrigin
псевдонимы дляdjango.template.base.Origin
удаляются.
Подробную информацию об этих изменениях см. В разделе « Функции, не рекомендуемые в версии 1.10» .
- Вариант удаляется.
makemigrations --exit
- Удалена поддержка прямого присвоения обратному внешнему ключу или отношению «многие ко многим».
get_srid()
Иset_srid()
методыdjango.contrib.gis.geos.GEOSGeometry
удаляются.get_x()
,set_x()
,get_y()
,set_y()
,get_z()
, Иset_z()
методыdjango.contrib.gis.geos.Point
удаляются.get_coords()
Иset_coords()
методыdjango.contrib.gis.geos.Point
удаляются.cascaded_union
Свойствоdjango.contrib.gis.geos.MultiPolygon
удаляется.django.utils.functional.allow_lazy()
устранен.- Вариант удаляется.
shell --plain
django.core.urlresolvers
Модуль удаляется в пользу нового места,django.urls
.CommaSeparatedIntegerField
удален, за исключением поддержки в исторических миграциях.- Шаблонный
Context.has_key()
метод удален. - Поддержка для
django.core.files.storage.Storage.accessed_time()
,created_time()
иmodified_time()
методы удаляется. - Поддержка поиска по запросу с использованием имени модели, когда
Meta.default_related_name
установлено, удалена. __search
Поиск в MySQL удален.- Прокладка для поддержки настраиваемых связанных классов менеджеров без
_apply_rel_filters()
метода удалена. - Использование
User.is_authenticated()
и вUser.is_anonymous()
качестве методов, а не свойств больше не поддерживается. Model._meta.virtual_fields
Атрибут удаляется.- Аргументы ключевого слова
virtual_only
inField.contribute_to_class()
иvirtual
inModel._meta.add_field()
удаляются. - Представления
javascript_catalog()
иjson_catalog()
удаляются. django.contrib.gis.utils.precision_wkt()
устранен.- В многотабличном наследовании неявное преобразование a
OneToOneField
в aparent_link
удаляется. - Поддержка
Widget._format_value()
удалена. FileField
методыget_directory_name()
иget_filename()
удаляются.mark_for_escaping()
Функции и классы , которые он использует:EscapeData
,EscapeBytes
,EscapeText
,EscapeString
, иEscapeUnicode
удаляются.- Теперь
escape
фильтр используетdjango.utils.html.conditional_escape()
. Manager.use_for_related_fields
устранен.Manager
Наследование модели следует правилам наследования MRO. Требование использоватьMeta.manager_inheritance_from_future
для подтверждения поведения удалено.- Удалена поддержка использования промежуточного программного обеспечения в старом стиле
settings.MIDDLEWARE_CLASSES
.