如何解决在 Django 迁移期间处理数据?
class Material(models.Model):
name = models.CharField(max_length=50,blank=False)
short_name = models.CharField(max_length=2,blank=False,unique=False,default='Al')
def __str__(self):
return self.name
class Meta:
db_table = 'material'
的新字段
status = models.IntergerField(default=1)
之后,如果我运行命令 python manage.py makemigrations,那么 django 将在表中添加一个新的字段状态。 让我们在表中有 3 行,然后值将如下所示:
1. Material1,M1,1
2. Material2,M2,1
3. Material3,M3,1
通过这次迁移,我也想改变每一行的状态并添加新行,就像
1. Material1,0
3. Material3,0
4. Material4,M4,1
有没有什么办法可以在 django 中处理架构迁移过程中的数据操作?
解决方法
您可以使用特殊操作(例如 django.db.migrations.RunPython
)来设置单个值。
(参考:https://docs.djangoproject.com/en/3.1/ref/migration-operations/#runpython)
假设您已经向模型添加了一个字段“状态”并且已经完成迁移(执行 manage.py makemigrations
)。
现在,执行 manage.py makemigrations your_app --empty
。
然后,编辑自动创建的迁移文件,如下所示。
from django.db import migrations
def set_individual_status(apps,schema_editor):
Material = apps.get_model("your_app","Material")
material_ids_status_0 = [2,3]
material_ids_status_1 = [1,4]
Material.objects.filter(id__in=material_ids_status_0).update(status=0)
Material.objects.filter(id__in=material_ids_status_1).update(status=1)
class Migration(migrations.Migration):
dependencies = [("your_app","00xx_auto_20210106_1527")]
operations = [
migrations.RunPython(set_individual_status,migrations.RunPython.noop)
]
然后,执行 manage.py migrate
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。