3.2.2 примечания к выпуску

Что нового в версии 3.2.2

Улучшения

  • Существенные «подкапотные» улучшения в дереве страниц, что привело к значительному сокращению перезагрузок дерева страниц и в целом к более чистому коду

  • Обновите версию jsTree до 3.2.1 с небольшими изменениями в дереве страниц

  • Улучшить отображение и удобство использования языкового меню, особенно в случаях, когда языков много

  • Улучшение документации

Исправления ошибок

  • Устранение проблемы, связанной с полями поиска в плагинах

  • Устранение проблемы, когда app-resolver запускал локали в миграции

  • Исправьте настройки кэша

  • Исправьте логику ToolbarMiddleware.is_cms_request

  • Исправьте многочисленные исправления в Django 1.9

  • Многочисленные другие улучшения общей стабильности и качества кода

Обратные ссылки на модельные отношения и Django 1.9

Django 1.9 гораздо строже относится к коллизиям в related_names полях отношений, чем предыдущие версии Django. Это выявило проблемы в django CMS, связанные с приватным полем CMSPlugin.cmsplugin_ptr. Проблема становится очевидной, когда установлено несколько пакетов, предоставляющих плагины с одинаковым именем класса модели. Хорошим примером будет, если у вас установлен пакет djangocms-file, который имеет плохо названный подкласс модели CMSPlugin под названием File, то любой другой пакет, который имеет плагин с полем с именем «file», скорее всего, вызовет проблему. Учитывая, что djangocms-file является очень часто используемым плагином, а имя поля «file» не является редкостью в других плагинах, это менее чем идеальный вариант.

К счастью, разработчики могут исправить эти проблемы в своих собственных проектах в ожидании улучшений в django CMS. Существует внутреннее поле, которое создается при инстанцировании плагинов: CMSPlugin.cmsplugin_ptr. Это закрытое поле объявляется в базовом классе CMSPlugin и заполняется при инстанцировании, используя имя модели подкласса CMSPlugin, который регистрируется.

Подкласс к CMSPlugin может объявить свое собственное поле cmsplugin_ptr, чтобы немедленно устранить эту проблему. Самое простое решение - объявить это поле с related_name «+». В типичном стиле Django это подавит обратную ссылку и предотвратит любые коллизии. Однако, если обратная ссылка требуется по какой-то причине (очень редко), то мы рекомендуем использовать шаблон %(app_label)s_%(class_name)s. На самом деле, в версии 3.3 django CMS, это именно тот строковый шаблон, который будет использоваться установкой ссылок для создания имени. Вот пример:

class MyPlugin(CMSPlugin):
    class Meta:
        app_label = 'my_package'

    cmsplugin_ptr = models.OneToOneField(
        CMSPlugin,
        related_name='my_package_my_plugin',
        parent_link=True
    )

    # other fields, etc.
    # ...

Обратите внимание, что CMSPlugin.cmsplugin_ptr останется закрытым полем.

Уведомление о предстоящих изменениях в 3.3

Как указано в разделе, расположенном непосредственно выше, шаблон, используемый в настоящее время для получения related_name для приватного поля CMSPlugin.cmsplugin_ptr, может привести к частым коллизиям. В django CMS 3.3 этот строковый шаблон будет изменен, чтобы использовать как app_label, так и имя класса модели. В большинстве случаев это не повлияет на разработчиков или пользователей, но если ваш проект по каким-то причинам использует эти обратные ссылки, пожалуйста, обратите внимание на это изменение и планируйте его соответствующим образом.

Коррупция Древобороды

До версии 3.2.1 перемещение или вставка вложенных плагинов могла привести к некоторым не фатальным повреждениям дерева, вызывая ошибку при добавлении плагинов под только что вставленными плагинами.

Чтобы устранить эти проблемы, обновите версию до 3.2.1 или более поздней, а затем выполните команду manage.py cms fix-tree для восстановления дерева.

DjangoCMS Text CKEditor

Необходимые действия

CMS 3.2.2 не совместим с djangocms-text-ckeditor < 2.8.1. Если вы используете djangocms-text-ckeditor, пожалуйста, обновите его до версии 2.8.1 или выше.

Вернуться на верх