Код: Выделить всё
class TestModel(models.Model):
field1 = models.CharField(max_length=255)
field2 = models.IntegerField()
def __str__(self):
return f"{self.field1}"
Поэтому я создаю новую модель NewTestModel:
Код: Выделить всё
class NewTestModel(models.Model):
field1 = models.CharField(max_length=255)
field2 = models.TextField()
def __str__(self):
return f"{self.field1}"
В файле миграции 0006_newtestmodel.py я добавляю функцию copy_data и запускаю ее с помощью миграции.RunPython (copy_data)
Код: Выделить всё
from django.db import migrations, models
def copy_data(apps, database_schema):
TestModel = apps.get_model("data_migrations", "TestModel")
NewTestModel = apps.get_model("data_migrations", "NewTestModel")
for old_object in TestModel.objects.all():
new_object = NewTestModel(
field1 = old_object.field1,
field2 = old_object.field2
)
new_object.save()
class Migration(migrations.Migration):
dependencies = [
('data_migrations', '0005_testmodel'),
]
operations = [
migrations.CreateModel(
name='NewTestModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('field1', models.CharField(max_length=255)),
('field2', models.TextField()),
],
),
migrations.RunPython(copy_data)
]
После этого я переименовываю NewTestModel в TestModel и еще раз запускаю команды миграции.
p>
Все получилось так, как должно было.
Правильно ли я сделал?
Подробнее здесь: https://stackoverflow.com/questions/786 ... orrect-way