Примечания к выпуску 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 помешал этой отправке формы вызвать ошибку «Permission Denied» для пользователей без разрешения «add».
Обратно несовместимое изменение: .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()
сбой при упорядочивании по реляционному полюManyToManyField
through
модели ( # 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()
( # 26122 ). - Всегда включается
geometry_field
в вывод сериализатора GeoJSON независимо отfields
параметра ( # 26138 ). - Исправлены
contrib.gis
виджеты карты при использованииUSE_THOUSAND_SEPARATOR=True
( # 20415 ). - Сделаны недопустимые формы отображать начальные значения отключенных полей ( # 26129 ).