Django 1.3 - BooleanField到DateTimeField迁移失败

时间:2013-07-21 20:52:55

标签: django postgresql migration django-south

在Postgres 9.1上使用Django 1.3。

我的任务是将两个旧的bool字段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)

1 个答案:

答案 0 :(得分:1)

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

我的建议是一步一步地进行迁移,就像这样:

  1. 创建名称为datetimepulled2
  2. 的新mail_report2
  3. 创建数据迁移以根据各自列pulledmail_report
  4. 中的布尔值填充此列
  5. 创建另一个迁移以删除布尔列pulledmail_report
  6. 创建上次迁移以将pulled2mail_report2重命名为pulledmail_report
  7. 希望此大纲和文档中的the tutorials有用!