Примечания к выпуску 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).
Вернуться на верх