我要从TextField中删除null=True:

-    footer=models.TextField(null=True, blank=True)
+    footer=models.TextField(blank=True, default='')

我创建了一个模式迁移:

manage.py schemamigration fooapp --auto

由于一些页脚列包含NULL,如果运行迁移,我会得到error:

德扬戈.db.乌提尔斯.IntegrityError:列"footer"包含空值

我在模式迁移中添加了以下内容:

    for sender in orm['fooapp.EmailSender'].objects.filter(footer=None):
        sender.footer=''
        sender.save()

现在我明白了:

django.db.utils.DatabaseError: cannot ALTER TABLE "fooapp_emailsender" because it has pending trigger events

怎么了?

推荐答案

每次迁移都在一个事务中.在PostgreSQL中,不能在一个事务中更新表,然后更改表架构.

您需要将数据迁移和模式迁移分开.首先使用以下代码创建数据迁移:

 for sender in orm['fooapp.EmailSender'].objects.filter(footer=None):
    sender.footer=''
    sender.save()

然后创建模式迁移:

manage.py schemamigration fooapp --auto

现在您有两个事务,两个步骤的迁移应该可以工作.

Django相关问答推荐

仅更新模型中的特定字段.Model Django

Django Model邮箱字段是必需的,即使在我将其设置为NULL=True和BLACK=True之后也是如此

如何在Django CMS中更新上下文

错误404除主要应用程序外,HTML页面无法渲染的其他应用程序

如何将我的函数添加到值参数?

自定义身份验证 django

Django Rest Framework 认证类覆盖 request.user

有谁知道是否可以将您的 Django Heroku 应用程序放到 App Store/Google Play 上?

NoneType对象没有属性保存Django

Nginx 响应 404 not found on Django media URL in preprod, dev ok

django 管理员登录突然要求 csrf 令牌

如何测试某个日志(log)消息是否记录在 Django 测试用例中?

Django - 如何从模型中 Select 特定列?

URL命名空间的一个真实例子

__init__() 得到了一个意外的关键字参数user

清理提交的表单数据中的 HTML

Django 和 VirtualEnv 开发/部署最佳实践

Django 有 SmallIntegerField 的原因是什么?

在 django 中获取空查询集的类名

将 AND 和 OR 与 Q 对象组合的 Django 查询过滤器不返回预期结果