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

Ahs*_*san 7 django django-south

我已经有一个模特

class ModelA( models.Model ):
    name = models.CharField ( max_length = 255, blank = False )
Run Code Online (Sandbox Code Playgroud)

我有很多条目.现在我想在其中添加一个字段,即

user = models.OneToOneField( User )
Run Code Online (Sandbox Code Playgroud)

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

gue*_*tli 12

我会用这种模式:

  1. 将"user = models.OneToOneField(User,null = True)"添加到模型中(不要删除"name"字段)
  2. 运行'manage.py schemamigration --auto'.并应用迁移.现在表中有两列.
  3. 现在创建一个数据迁移.编辑文件:您需要遍历模型中的所有对象并设置用户字段.
  4. 从model.py文件中删除"name = models.CharField".并从用户字段中删除null = True.
  5. 运行'manage.py schemamigration --auto'.并应用迁移

顺便说一句,如果你使用不带null = True的OneToOneField(),你可以在这个字段上设置primary_key = True,因为它必须是唯一的.但我不知道南方是否可以处理这种迁移.

  • 对于Django迁移(没有南方),完全相同的方法适用于步骤2和5的'python manage.py makemigrations'.谢谢! (3认同)