在 django 迁移期间处理数据?
Handling data during django migrations?
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)
之后如果我运行命令pythonmanage.pymakemigrations,那么django会在[=26=中添加一个新的字段status ].
假设我在 table 中有 3 行,那么值将如下所示:
1. Material1, M1, 1
2. Material2, M2,1
3. Material3, M3, 1
通过这次迁移,我还想更改每一行的状态并添加新行也像
1. Material1, M1, 1
2. Material2, M2,0
3. Material3, M3, 0
4. Material4, M4, 1
有什么方法可以处理 Django 中模式迁移过程中的数据操作吗?
您可以使用django.db.migrations.RunPython
等特殊操作来设置单独的值。
(参考:https://docs.djangoproject.com/en/3.1/ref/migration-operations/#runpython)
假设您已将字段 'status' 添加到模型并且已经完成迁移(执行 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
.
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)
之后如果我运行命令pythonmanage.pymakemigrations,那么django会在[=26=中添加一个新的字段status ]. 假设我在 table 中有 3 行,那么值将如下所示:
1. Material1, M1, 1
2. Material2, M2,1
3. Material3, M3, 1
通过这次迁移,我还想更改每一行的状态并添加新行也像
1. Material1, M1, 1
2. Material2, M2,0
3. Material3, M3, 0
4. Material4, M4, 1
有什么方法可以处理 Django 中模式迁移过程中的数据操作吗?
您可以使用django.db.migrations.RunPython
等特殊操作来设置单独的值。
(参考:https://docs.djangoproject.com/en/3.1/ref/migration-operations/#runpython)
假设您已将字段 'status' 添加到模型并且已经完成迁移(执行 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
.