Примечания к выпуску Django 1.9.2¶
1 февраля 2016
Django 1.9.2 исправляет регрессию безопасности в 1.9 и несколько ошибок в 1.9.1. В нем также сделано небольшое изменение, несовместимое с обратным ходом, которое, надеемся, не затронет никого из пользователей.
Проблема безопасности: Пользователь с правом «изменить», но не «добавить» может создавать объекты для ModelAdmin
’s с 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). - Исправлена ошибка, из-за которой элементы «user-tools» отображались на странице выхода администратора из системы (#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).
- Исправлена проверка куки 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).