使用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
相关产品推荐
相关产品推荐

