2017-05-03 54 views
1

我有只存储单个值的模型:如何在迁移过程中复制字段值?

class Number(models.Model): 
    id = models.AutoField(primary_key=True, unique=True) 

现在我想改变的行为,所以我需要的数量不是唯一的了。

class Number(models.Model): 
    id = models.AutoField(primary_key=True, unique=True) 
    number = models.IntegerField(blank=True) 

如何判断迁移使用ID字段作为“一次性值”?

+0

它并问你有什么用已经存在的记录呢? –

+0

是的。如何告诉它从其他领域获取价值? – JasonTS

+0

你想运输的是当前在'id'字段到'number'字段吗? –

回答

2

的方式我:这可能与RunPython函数,它是这样做做这样的事情是添加字段,就像你已经完成并运行迁移

python manage.py schemamigration your_app --auto 
python manage.py migrate your_app 

然后你就可以创建一个datamigration像这样

python manage.py datamigration your_app copy_id_to_number 

然后打开文件迁移刚与上面的命令创建和更改def forward(self, orm)像这样

def forwards(self, orm): 
    for num in orm.Number.objects.all(): 
     if num.id: 
      num.number = num.id 

那么你将要当您尝试makemigrations运行此迁移

python manage.py migrate your_app 
1

您需要在两次迁移中完成此操作。第一个将添加字段,以0一次性默认第二个将拷贝过来的值:

from django.db.models import F 
Number.objects.update(number=F('id')) 
相关问题