2

在 Postgres 9.1 上使用 Django 1.3。

我的任务是迁移两个旧的布尔字段pulledmail_report时间戳。

在尝试迁移时,我收到以下错误,我不确定如何绕过手动删除数据库中的非 Null 约束以允许我将所有记录转换为 null。 django.db.utils.DatabaseError: column "pulled" cannot be cast to type timestamp with time zone

任何不涉及我手动修改我们的实时数据库的见解将不胜感激。

模型声明更改:

     # Reporting Checked Flags
     # pulled => Object has been processed through order_picklist
-    pulled = models.BooleanField(default=False)
+    pulled = models.DateTimeField(blank=True, null=True, default=None)
     # mail_report => Object has been processed through report_mailing_list
-    mail_report = models.BooleanField(default=False)
+    mail_report = models.DateTimeField(blank=True, null=True, default=None)
4

1 回答 1

1

您应该阅读South's docs 中Data Migration部分。在那里,他们教你如何将纯文本密码更改为散列密码。为此,他们需要保留当前密码的值并进行转换。

我的建议是逐步进行迁移,如下所示:

  1. 使用名称创建新datetime的 s 列:pulled2,mail_report2
  2. 根据各自列中的布尔值创建数据迁移以填充这些列,pulled并且mail_report
  3. 创建另一个迁移以删除布尔列pulledmail_report
  4. 创建最后一个迁移以重命名pulled2mail_report2pulledmail_report

希望这个大纲和文档中的教程对您有所帮助!

于 2013-07-21T22:22:07.043 回答