我正在尝试运行我的应用程序测试(Django v1.11和Wagtail v2.2.1),但是在测试创建测试数据库时出现异常:
Traceback (most recent call last):
File "/home/fleon/.virtualenvs/virmyasb/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.IntegrityError: null value in column "draft_title" violates not-null constraint
DETAIL: Failing row contains (3, 0001, 1, 1, Root, root, t, f, /, , f, , null, null, f, 1, null, f, null, null, null, null, null).
查看完整的堆栈跟踪时,Wagtail文件内有错误:
[...]
lib/python3.6/site-packages/wagtail/core/migrations/0001_squashed_0016_change_page_url_path_to_text_field.py", line 30, in initial_data
[...]
此类行中的Python代码为:
# Create root page
root = Page.objects.create(
title="Root",
slug='root',
content_type=page_content_type,
path='0001',
depth=1,
numchild=1,
url_path='/',
)
未设置草稿标题,因此违反了非空约束。
请注意,我正在使用两个不同的数据库(base.py):
DATABASES = {
'default': dj_database_url.config(),
'thedbname': {
'NAME': 'thedbname',
'ENGINE': 'django.db.backends.mysql',
'USER': 'thedbuser',
'PASSWORD': '***',
'HOST': 'myhost',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
},
}
}
如果删除MySQL数据库(?),测试就可以正常工作
答案 0 :(得分:0)
在迁移Page.draft_title
中,wagtail/core/migrations/0040_page_draft_title.py
字段已添加到Wagtail中。由于迁移总是在模型的冻结版本上进行,因为它是在迁移时已经存在的,因此0001_squashed_0016_change_page_url_path_to_text_field.py
中的代码是有效的-draft_title
当时不存在。
该错误表明由于某种原因迁移发生在正常顺序之外-我建议检查项目中的迁移是否存在任何可能影响顺序的依赖项,例如run_before
-或正在重新-在已经应用了迁移的数据库上运行(但没有将它们记录在django_migrations
表中,因此Django对此不了解)。