Python 在django迁移期间处理数据?

Python 在django迁移期间处理数据?,python,django,django-models,django-migrations,Python,Django,Django Models,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 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'
之后,若我运行命令python manage.py makemigrations,django将在表中添加一个新字段status。 让我在表中有3行,那么值将如下所示:

status = models.IntergerField(default=1)
通过这次迁移,我还想更改每一行的状态,并添加新行,如

1. Material1, M1, 1
2. Material2, M2,1
3. Material3, M3, 1

有没有办法在django中处理模式迁移过程中的数据操作?

您可以通过使用特殊操作(如
django.db.migrations.RunPython)来设置单个值

(参考号:)

假设您已经向模型添加了一个字段“status”,并且已经完成了迁移(执行
manage.py makemigrations

现在,在您的应用程序中执行
manage.py makemigrations--empty
。 然后,编辑自动创建的迁移文件,如下所示

从django.db导入迁移
def设置个人状态(应用程序、模式编辑器):
材质=应用程序。获取模型(“您的应用程序”、“材质”)
物料标识状态0=[2,3]
物料标识状态1=[1,4]
Material.objects.filter(id\u in=Material\u id\u status\u 0)。更新(status=0)
Material.objects.filter(id\u in=Material\u id\u status\u 1)。更新(status=1)
类迁移(migrations.Migration):
依赖项=[(“您的应用程序”、“00xx\u自动\u 20210106\u 1527”)]
操作=[
migrations.RunPython(设置个人状态,migrations.RunPython.noop)
]

然后,执行
manage.py migrate

为什么
Material2
Material3
1
0
?在迁移中操纵数据是可能的,也是常见的,但挑选单个记录进行变异让我觉得这是一个错误。@Chris:这只是我遇到的一个例子。这就像我有一份现有材料的清单,客户要求我添加一个名为“状态”的新字段,并向每个材料添加个人状态。
1. Material1, M1, 1
2. Material2, M2,0
3. Material3, M3, 0
4. Material4, M4, 1