我有一个只存储一个值的模型:
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 :(得分:2)
我这样做的方法是添加你已经完成的字段并运行该迁移
python manage.py schemamigration your_app --auto
python manage.py migrate your_app
然后你可以像这样创建一个数据迁移
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
然后您将要运行此迁移
python manage.py migrate your_app
答案 1 :(得分:1)
您需要在两次迁移中执行此操作。第一个将添加字段,一次性默认值为0.第二个将复制值:这可以使用RunPython函数完成,其执行类似这样的操作:
from django.db.models import F
Number.objects.update(number=F('id'))