Примечания к выпуску Django 1.9.2¶
1 февраля 2016 г.
Django 1.9.2 исправляет ухудшение безопасности в версии 1.9 и несколько ошибок в версии 1.9.1. Он также вносит небольшое обратно несовместимое изменение, которое, будем надеяться, не повлияет на пользователей.
Проблема безопасности: пользователь с разрешением «изменить», но не «добавлять», может создавать объекты для ModelAdmin с помощью save_as=True.¶
Если ModelAdmin использует save_as=True (не по умолчанию), администратор предоставляет возможность при редактировании объектов «Сохранить как новый». Регрессия в Django 1.9 не позволяла отправке формы вызывать ошибку «Отказано в доступе» для пользователей без разрешения «добавление».
Изменение обратной несовместимости: файлы .py-tpl переписаны в шаблонах проектов/приложений.¶
Добавление некоторого синтаксиса языка шаблонов Django к шаблону приложения по умолчанию в Django 1.9 означает, что эти файлы теперь содержат недопустимый синтаксис Python. Это вызывает трудности для систем упаковки, которые безоговорочно компилируют файлы *.py побайтово.
Чтобы исправить это, суффикс .py-tpl теперь используется для файлов шаблонов проектов и приложений, включенных в Django. Суффикс .py-tpl заменяется на .py командами startproject и startapp. Например, шаблон с именем файла «manage.py-tpl» будет создан как «manage.py».
Если у вас есть собственный шаблон проекта, содержащий файлы .py-tpl, и вы считаете такое поведение проблематичным, подайте заявку.
Исправления¶
Исправлена регрессия в
ConditionalGetMiddleware, из-за которой проверкиIf-None-Matchвсегда возвращали HTTP 200 (#26024).Исправлена регрессия, из-за которой элементы «инструменты пользователя» отображались на странице выхода администратора (#26035).
Исправлен сбой в системе переводов, когда на текущем языке нет переводов (#26046).
Исправлена регрессия, из-за которой выбирался неправильный день при открытии виджета календаря администратора для часовых поясов от GMT+0100 до GMT+1200 (#24980).
Исправлена регрессия во всплывающем окне администратора, связанном с редактированием модели, из-за которой экранированное значение отображалось в раскрывающемся списке выбора родительского окна (#25997).
Исправлена регрессия в версии 1.8.8, приводившая к неправильной обработке индексов при миграции в PostgreSQL при добавлении
db_index=Trueили``unique=True`` кCharFieldилиTextField, для которого уже был указан другой, или при удалении одного из них из поля, в котором были оба, или при добавленииunique=Trueк полю, уже указанному вunique_together(:билет:`26034`).Исправлена регрессия, из-за которой определение отношения в поле абстрактной модели с использованием имени строковой модели без app_label больше не разрешало эту ссылку на приложение абстрактной модели при использовании этой модели в другом приложении (#25858).
Исправлен сбой при уничтожении существующей тестовой базы данных MySQL или PostgreSQL (#26096).
Исправлена проверка файлов cookie CSRF для запросов POST, когда USE_X_FORWARDED_PORT=True (#26094).
Исправлен сбой
QuerySet.order_by()при заказе по реляционному полю моделиManyToManyFieldthrough(#26092).Исправлена регрессия, которая вызывала исключение при выполнении запросов к базе данных SQLite с более чем 2000 параметрами, когда
DEBUGимеет значениеTrueв дистрибутивах, которые увеличивают ограничение времени компиляцииSQLITE_MAX_VARIABLE_NUMBERдо более чем 2000, таких как Debian (#26063).Исправлен сбой при использовании обратного
OneToOneFieldвModelAdmin.readonly_fields(#26060).Исправлен сбой при вызове команды
migrateв тестовом примере с атрибутомavailable_apps, указывающим на приложение с отключенной миграцией с использованием настройкиMIGRATION_MODULES(#26135).Восстановлена возможность инструментов тестирования и отладки определять шаблон, из которого произошел узел, даже во время наследования или включения шаблона. До Django 1.9 инструменты отладки могли получить доступ к источнику шаблона из узла через
Node.token.source[0]. Это был недокументированный частный API. Источник теперь доступен непосредственно на каждом узле с помощью атрибута Node.origin (#25848).Исправлена регрессия в Django 1.8.5, которая не позволяла копировать SimpleLazyObject с помощью copy.copy() (:ticket:26122).
Всегда включает
geometry_fieldв выходные данные сериализатора GeoJSON независимо от параметраfields(#26138).Исправлены виджеты карты contrib.gis при использовании USE_THOUSAND_SEPARATOR=True (#20415).
В недействительных формах отображаются начальные значения отключенных полей (#26129).