我使用Django 1.6作为banckend并且我使用South进行迁移。
我有两个表Content
和Channel
,我在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
,因为默认情况下我希望它为空,我该如何解决?谢谢!
答案 0 :(得分:2)
该消息基本上是这样说的:您之前在模型adress
中有一个名为Content
的字段,并且在您定义它时它不能为空(您不要#&## 39;在该字段上有null=True
。删除它时,如果要撤消迁移,南方需要知道在恢复字段时要填写的值。
如果您了解南方,它有forward
和backward
方法,分别应用和还原更改。如果要撤消迁移,则无法恢复模型adress
上的字段Content
的数据。但是你已经让它不可为空,南方需要填写一些值,因此提示信息。
解决方案取决于您的需求。如果您不想恢复该字段的值,请选择3
即可,因为您永远不会向后迁移。或者选择2
,但它不会比3
做得更好,只需填写所有记录的默认值,这很可能不是您想要的。