Ошибка при использовании 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 проверка на наличие пользователя названа "уродливым взломом разрешений", поэтому я предполагаю, что разработчики знают об этой проблеме.