perf: 优化迁移

pull/6772/head
ibuler 2021-08-23 10:53:34 +08:00 committed by Jiangjie.Bai
parent b69ed8cbe9
commit 3d934dc7c0
1 changed files with 17 additions and 3 deletions

View File

@ -1,7 +1,8 @@
# Generated by Django 3.1.6 on 2021-06-04 16:46 # Generated by Django 3.1.6 on 2021-06-04 16:46
import uuid
from django.db import migrations, models, transaction from django.db import migrations, models, transaction
import django.db.models.deletion import django.db.models.deletion
from django.db import IntegrityError
from django.db.models import F from django.db.models import F
@ -15,7 +16,7 @@ def migrate_admin_user_to_system_user(apps, schema_editor):
for admin_user in admin_users: for admin_user in admin_users:
kwargs = {} kwargs = {}
for attr in [ for attr in [
'id', 'org_id', 'username', 'password', 'private_key', 'public_key', 'org_id', 'username', 'password', 'private_key', 'public_key',
'comment', 'date_created', 'date_updated', 'created_by', 'comment', 'date_created', 'date_updated', 'created_by',
]: ]:
value = getattr(admin_user, attr) value = getattr(admin_user, attr)
@ -27,7 +28,16 @@ def migrate_admin_user_to_system_user(apps, schema_editor):
).exists() ).exists()
if exist: if exist:
name = admin_user.name + '_' + str(admin_user.id)[:5] name = admin_user.name + '_' + str(admin_user.id)[:5]
i = admin_user.id
exist = system_user_model.objects.using(db_alias).filter(
id=i, org_id=admin_user.org_id
).exists()
if exist:
i = uuid.uuid4()
kwargs.update({ kwargs.update({
'id': i,
'name': name, 'name': name,
'type': 'admin', 'type': 'admin',
'protocol': 'ssh', 'protocol': 'ssh',
@ -36,7 +46,11 @@ def migrate_admin_user_to_system_user(apps, schema_editor):
with transaction.atomic(): with transaction.atomic():
s = system_user_model(**kwargs) s = system_user_model(**kwargs)
s.save() try:
s.save()
except IntegrityError:
s.id = None
s.save()
print(" Migrate admin user to system user: {} => {}".format(admin_user.name, s.name)) print(" Migrate admin user to system user: {} => {}".format(admin_user.name, s.name))
assets = admin_user.assets.all() assets = admin_user.assets.all()
s.assets.set(assets) s.assets.set(assets)