Как обновить данные в базе данных, когда 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),
),
]