Django和南迁:出人意料的领域出现了

时间:2016-05-11 14:20:23

标签: django django-south

我使用Django 1.6作为banckend并且我使用South进行迁移。 我有两个表ContentChannel,我在adress中添加了一个字段Channel

class Channel(models.Model):
  name = models.CharField(max_length=256)
  adress = models.CharField(max_length=256,null=True)

我在表ForeignKey中添加了Content

class Content(models.Model):
  name = models.CharField(max_length=256)
  channel = models.ForeignKey(Channel, null=True, blank=True)

当我运行命令时:

python manage.py schemamigration myapp --auto

我明白了:

 + Added field adress on myapp.Channel
 ? The field 'Content.adress' does not have a default specified, yet is NOT NULL.
 ? Since you are removing this field, you MUST specify a default
 ? value to use for existing rows. Would you like to:
 ?  1. Quit now.
 ?  2. Specify a one-off value to use for existing columns now
 ?  3. Disable the backwards migration by raising an exception; you can edit the migration to fix it later
 ? Please select a choice: Connection to v-atm-t3v closed by remote host.

为什么我有字段Content.adress?我将ForeignKey标记为null=True,blank=True,因为默认情况下我希望它为空,我该如何解决?谢谢!

1 个答案:

答案 0 :(得分:2)

该消息基本上是这样说的:您之前在模型adress中有一个名为Content的字段,并且在您定义它时它不能为空(您不要#&## 39;在该字段上有null=True。删除它时,如果要撤消迁移,南方需要知道在恢复字段时要填写的值。

如果您了解南方,它有forwardbackward方法,分别应用和还原更改。如果要撤消迁移,则无法恢复模型adress上的字段Content的数据。但是你已经让它不可为空,南方需要填写一些值,因此提示信息。

解决方案取决于您的需求。如果您不想恢复该字段的值,请选择3即可,因为您永远不会向后迁移。或者选择2,但它不会比3做得更好,只需填写所有记录的默认值,这很可能不是您想要的。