Django 版本:10.11.10 Python版本:3.6.4
我将在 mssql 2017 上安装 DjangoCms,然后按照以下步骤操作
我用这个设置安装了djangocms
DATABASES = { 'default': { 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.sqlite3', 'HOST': 'localhost', 'NAME': 'project.db', 'PASSWORD': '', 'PORT': '', 'USER': '' } }
确认与
连接良好后python管理.py运行服务器
我修改了数据库设置:
DATABASES = {
'default': {
'CONN_MAX_AGE': 0,
'ENGINE': 'sql_server.pyodbc', #sql server
'NAME': 'myDB',
'USER': 'userdb',
'PASSWORD': 'passworddb',
'HOST': '127.0.0.1',
'PORT': '',
'OPTIONS': {
'driver': 'SQL Server',
},
},
}
然后我输入:
>python manage.py migrate
>python manage.py runserver
>python manage.py createsuperuser
我可以以超级用户身份登录,但是当我使用 cms_wizard 启动时,我收到以下消息:
/it/cms_wizard/create/
出现编程错误Exception Value:
('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]'substr' is not a recognized built-in function name. (195) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'AND'. (156); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (8180)")
我不知道如何解决这个问题
这是针对 Django CMS 版本 4.1.4 和 SQL Server 2019 的修复,但这也可能适用于您。
编辑 CMS 的 pagemodel.py 并将其使用 substr 的位置更改为 SUBSTRING 并添加路径长度的附加参数。在 Django CMS 4.1.4 中,它位于 _remove_title_root_path 函数中。
要找到该文件: 如果您使用的是虚拟环境,请进入项目的虚拟环境文件夹 > Lib > site-packages > cms > models > pagemodel.py
变量sql_func使用substr函数作为参数,所以我将其修改为以下内容,还添加了导入,我的问题得到了解决:
from django.db.models.functions import Length
sql_func = models.Func(
models.F('path'),
models.Value(trim_count),
Length('path'),
function='SUBSTRING',
)
发生该错误的原因是 SQL Server 没有 substr 命令,而是使用 SUBSTRING。该函数与 substr 命令相同,但多了一个“length”参数。上述调整使用动态路径长度,因此您不会遇到路径长度问题,但您可以仅输入 50 这样的静态值,而不是 Length('path')。