You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django CMS API的create_page函数时出现用户警告求助

解决Django CMS create_page的UserWarning警告

警告原因:Django CMS的create_page内部创建PageContent时,需要关联合法用户对象来生成版本记录,但当前线程上下文取不到有效User对象,用了字符串"unknown user"替代,导致版本创建失败触发警告。

不用修改内置API,直接给create_page传递created_by参数即可解决,分两种场景处理:

场景1:有请求上下文(比如视图、后台操作)

直接把请求的用户对象传给created_by:

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

# 假设在视图中,request为当前请求对象
new_page = create_page(
    title='Example',
    template=TEMPLATE_INHERITANCE_MAGIC,
    language='en',
    created_by=request.user  # 关键:传入当前合法用户
)

场景2:无请求上下文(比如脚本、定时任务)

先获取或创建一个超级用户(需确保有足够权限),再传入参数:

from django.contrib.auth import get_user_model
from cms.api import create_page
from cms.constants import TEMPLATE_INHERITANCE_MAGIC

User = get_user_model()
# 获取现有超级用户,若无则创建(根据实际需求调整)
admin_user = User.objects.filter(is_superuser=True).first()
if not admin_user:
    admin_user = User.objects.create_superuser(
        username='admin',
        email='admin@example.com',
        password='admin123'
    )

new_page = create_page(
    title='Example',
    template=TEMPLATE_INHERITANCE_MAGIC,
    language='en',
    created_by=admin_user  # 传入合法User对象
)

原理:create_page的created_by参数会传递给内部的create_page_content,同时Django CMS会自动将该用户绑定到线程上下文,让with_user(user)拿到合法的User对象,从而正常生成版本记录,消除警告。

内容的提问来源于stack exchange,提问作者Leyght

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:43:16