Примечания к выпуску 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. На этом этапе вы должны иметь возможность запускать тесты для своего проекта с помощью python -Wd, чтобы вывести предупреждения об устаревании. После их исправления ваше приложение должно быть совместимо с Django 2.0.
Что нового в 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
чтобы она могла писать в конфигурации URL.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:
Формы ¶
- Аргументы new
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.
Изменения несовместимы со старыми версиями в Django 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.
См. « Функции, не рекомендуемые в Django 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
.