# Generated by Django 3.2.14 on 2023-01-17 02:04 import common.db.encoder from django.db import migrations, models from audits.backends.db import OperateLogStore def migrate_operate_log_after_before(apps, schema_editor): operate_log_model = apps.get_model("audits", "OperateLog") db_alias = schema_editor.connection.alias count, batch_size = 0, 1000 while True: operate_logs = [] queryset = operate_log_model.objects.using(db_alias).all()[count:count + batch_size] if not queryset: break count += len(queryset) for inst in queryset: before, after, diff = inst.before, inst.after, dict() if not any([before, after]): continue diff = OperateLogStore.convert_before_after_to_diff(before, after) inst.diff = diff operate_logs.append(inst) operate_log_model.objects.bulk_update(operate_logs, ['diff']) class Migration(migrations.Migration): dependencies = [ ('audits', '0019_alter_operatelog_options'), ] operations = [ migrations.AddField( model_name='operatelog', name='diff', field=models.JSONField(default=dict, encoder=common.db.encoder.ModelJSONFieldEncoder, null=True), ), migrations.AddField( model_name='operatelog', name='detail', field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Detail'), ), migrations.RunPython(migrate_operate_log_after_before), migrations.RemoveField(model_name='operatelog', name='after', ), migrations.RemoveField(model_name='operatelog', name='before', ), migrations.AlterField( model_name='operatelog', name='resource_id', field=models.CharField(blank=True, db_index=True, default='', max_length=128, verbose_name='Resource'), ), ]