Как обновить данные в базе данных, когда status_choice удаляется из моделей

В моделях у меня был выбор статуса

status = models.CharField(max_length=50, default="FIELD_1", choices=STATUS)

вот так:

STATUS = (
        ('FIELD_1', _('value FIELD_1')),
        ('FIELD_2', _('value FIELD_2')),
        ('FIELD_3', _('value FIELD_3')),
        ('FIELD_4', _('value FIELD_4')),
        ('FIELD_5', _('value FIELD_5')),
    )

Я удалил ('FIELD_5', _('value FIELD_5')), и ('FIELD_4', _('value FIELD_4')), из STATUS вариантов. Как я могу обновить значение status в базе данных до FIELD_1, если оно было FIELD_5 или FIELD_4

Добавьте в миграцию операцию миграции данных, которая изменяет выбор, обновите значения для старых строк в ней

from django.db import migrations, models


def update_status(apps, schema_editor):
    MyModel = apps.get_model('yourappname', 'MyModel')
    MyModel.objects.filter(status__in=['FIELD_4', 'FIELD_5']).update(status='FIELD_1')


class Migration(migrations.Migration):

    dependencies = [
        ('yourappname', 'xxx_previous'),
    ]

    operations = [
        migrations.RunPython(update_status),
        migrations.AlterField(
            model_name='mymodel',
            name='status',
            field=models.CharField(choices=[('FIELD_1', 'value FIELD_1'), ('FIELD_2', 'value FIELD_2'), ('FIELD_3', 'value FIELD_3')], default='FIELD_1', max_length=50),
        ),
    ]
Вернуться на верх