Django 如何通过向南迁移在现有模型中添加一对一关系字段

Django 如何通过向南迁移在现有模型中添加一对一关系字段,django,django-south,Django,Django South,我已经有了一个模型 class ModelA( models.Model ): name = models.CharField ( max_length = 255, blank = False ) 我在里面有很多条目。现在我想在其中添加一个字段,它是 user = models.OneToOneField( User ) 如何将此字段添加到ModelA?除了删除以前的所有条目,还有其他解决方案吗?我会使用以下模式: 将“user=models.OneToOneField(user,

我已经有了一个模型

class ModelA( models.Model ):
    name = models.CharField ( max_length = 255, blank = False )
我在里面有很多条目。现在我想在其中添加一个字段,它是

user = models.OneToOneField( User )

如何将此字段添加到
ModelA
?除了删除以前的所有条目,还有其他解决方案吗?

我会使用以下模式:

  • 将“user=models.OneToOneField(user,null=True)”添加到模型中(不要删除“name”字段)
  • 运行“manage.py schemamigration--auto”。并应用迁移。现在,表中有两列
  • 现在创建一个数据迁移。编辑文件:需要在模型中的所有对象上循环并设置用户字段
  • 从model.py文件中删除“name=models.CharField”。并从用户字段中删除null=True
  • 运行“manage.py schemamigration--auto”。并应用迁移

  • 顺便说一句,如果使用OneToOneField()而不使用null=True,则可以在此字段上设置primary_key=True,因为它必须是唯一的。但我不知道南方是否能处理好这次移民。

    问题是什么
    --auto
    不起作用?
    --auto
    起作用,但要求为以前的条目提供默认值?
    用户
    字段为
    unique=True
    null=False
    如果要删除以前的所有条目,只需在迁移之前删除它们即可。:-)@szaman
    OneToOneField
    unique=True
    所以在步骤5之后,数据库中不允许有多个空条目,当我要迁移时,迁移要求为用户添加默认值,因为它将从空状态变为非空。那么默认值是什么呢?空字符串不起作用:(请尝试0,或编辑创建架构迁移文件,并在此处提供默认值0。完全相同的方法适用于Django迁移(无South),步骤2和5使用“python manage.py makemigrations”。谢谢!