【发布时间】:2018-02-01 05:59:59
【问题描述】:
django.db.utils.OperationalError: cannot ALTER TABLE "news_article" because it has pending trigger events
所以,我有以下问题:
我有一个 Django 类 Article,它包含几个 Char- 和 TextFields。它们被设置为blank=True 和null=True,这是……不幸的。哦,好吧,不,我需要解决这个问题。所以在我删除null=True并设置default=''后,我在迁移中写了以下内容:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import languagefields.utils
from languagefields.utils import LANGUAGES
from django.utils.translation import activate
from news.models import Article
def null_migrations(apps, schema_editor):
activate('en')
fields = ['short_title', 'description']
for p in Article.objects.all():
for l in LANGUAGES:
for f in fields:
if p.get_language(l, f) is None:
p.set_localized(l, f, '')
p.save()
class Migration(migrations.Migration):
dependencies = [
('news', '0001_initial'),
]
operations = [
migrations.RunPython(null_migrations),
migrations.AlterField(....
这些字段是基于默认 Char-/TextFields 的自定义字段,可启用翻译。所以有一堆。对于您创建的每个字段,将有 5 个,用英语、德语等进行描述......所以是的,这个小功能工作正常,我在服务器上运行它并手动清理了数据库条目,但这并没有停止上述例外。所以我想我会把它放在迁移中,以便在旅途中进行清理。但仍然是个例外。我做错了什么?
提前谢谢你:)
编辑
将迁移一分为二:
0002_null_cleaning.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import languagefields.utils
from languagefields.utils import LANGUAGES
from django.utils.translation import activate
from news.models import Article
def null_migrations(apps, schema_editor):
activate('en')
fields = ['short_title', 'description']
for p in Article.objects.all():
for l in LANGUAGES:
for f in fields:
if p.get_language(l, f) is None:
p.set_localized(l, f, '')
p.save()
class Migration(migrations.Migration):
dependencies = [
('news', '0001_initial'),
]
operations = [
migrations.RunPython(null_migrations),
]
0003_data_migration
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import languagefields.utils
class Migration(migrations.Migration):
dependencies = [
('news', '0002_null_cleaning'),
]
operations = [
migrations.AlterField(...
同样的错误,发生在0003
【问题讨论】:
标签: python django django-migrations