Ошибка при использовании cms.api.create_page "UserWarning: При создании нового объекта PageContent не был указан пользователь."

Когда я использую функцию Django CMS API "create_page", я получаю следующую ошибку:

UserWarning: No user has been supplied when creating a new PageContent object. No version could be created. Make sure that the creating code also creates a Version objects or use PageContent.objects.with_user(user).create(...)
  page_content = PageContent.objects.with_user(user).create(

При выполнении функции "create_page" создается страница, а затем выполняется функция "create_page_content", которая выдает ошибку в следующей строке кода:

user = getattr(_thread_locals, "user", "unknown user")
page_content = PageContent.objects.with_user(user).create(
    language=language,
    title=title,
    menu_title=menu_title,
    page_title=page_title,
    redirect=redirect,
    meta_description=meta_description,
    page=page,
    created_by=created_by,
    changed_by=created_by,
    soft_root=soft_root,
    in_navigation=in_navigation,
    template=template,
    limit_visibility_in_menu=limit_visibility_in_menu,
    xframe_options=xframe_options,
)

Это часть встроенного API Django CMS, поэтому я не могу его изменить. Я мог бы скопировать функции "create_page" и "create_page_content" и использовать отредактированные копии, но это кажется довольно грубым решением, и, возможно, я просто что-то упускаю.

Мой соответствующий код:

from cms.api import create_page
from cms.constants import TEMPLATE_INHERITANCE_MAGIC

new_page = create_page(title='Example', template=TEMPLATE_INHERITANCE_MAGIC, language='en')

django версия: 5.0.1 django-cms версия: 4.1.0 python версия: 3.12.2

Решено: Мне нужно было добавить объект "User" в качестве параметра "created_by", например:

from cms.api import create_page
from cms.constants import TEMPLATE_INHERITANCE_MAGIC
from django.contrib.auth.models import User

new_page = create_page(title='Example', template=TEMPLATE_INHERITANCE_MAGIC, language='en', created_by=User.objects.get(username='user'))

По умолчанию параметр "created_by" устанавливается в строку 'python-api', что не работает.
В комментариях к api проверка на наличие пользователя названа "уродливым взломом разрешений", поэтому я предполагаю, что разработчики знают об этой проблеме.

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