perf: 优化 platform automation 结构

pull/10226/head
ibuler 2023-04-17 15:24:10 +08:00 committed by Jiangjie.Bai
parent 2b00e6e3a1
commit 20e7efcd70
2 changed files with 55 additions and 4 deletions

View File

@ -0,0 +1,53 @@
# Generated by Django 3.2.17 on 2023-04-17 06:32
from django.db import migrations, models
def migrate_platform_automation_id(apps, schema_editor):
platform_model = apps.get_model('assets', 'Platform')
for platform in platform_model.objects.all():
platform._automation_id = platform.automation.id
platform.save(update_fields=['_automation_id'])
def migrate_automation_platform(apps, schema_editor):
platform_model = apps.get_model('assets', 'Platform')
automation_model = apps.get_model('assets', 'PlatformAutomation')
platforms = platform_model.objects.all()
for platform in platforms:
if not platform._automation_id:
continue
automation = automation_model.objects.filter(id=platform._automation_id).first()
if not automation:
continue
automation.platform = platform
automation.save(update_fields=['platform'])
def migrate_null_platform_automation(apps, schema_editor):
automation_model = apps.get_model('assets', 'PlatformAutomation')
null_platform_automations = automation_model.objects.filter(platform__isnull=True)
null_platform_automations.delete()
class Migration(migrations.Migration):
dependencies = [
('assets', '0114_baseautomation_params'),
]
operations = [
migrations.AddField(
model_name='platform',
name='_automation_id',
field=models.UUIDField(editable=False, null=True),
),
migrations.RunPython(migrate_platform_automation_id),
migrations.RemoveField(model_name='platform', name='automation'),
migrations.AddField(
model_name='platformautomation',
name='platform',
field=models.OneToOneField(null=True, on_delete=models.deletion.CASCADE,
related_name='automation', to='assets.platform'),
),
migrations.RunPython(migrate_automation_platform),
]

View File

@ -72,6 +72,7 @@ class PlatformAutomation(models.Model):
max_length=32, blank=True, null=True, verbose_name=_("Gather facts method")
)
gather_accounts_params = models.JSONField(default=dict, verbose_name=_("Gather facts params"))
platform = models.OneToOneField('Platform', on_delete=models.CASCADE, related_name='automation', null=True)
class Platform(JMSBaseModel):
@ -99,11 +100,8 @@ class Platform(JMSBaseModel):
# 账号有关的
su_enabled = models.BooleanField(default=False, verbose_name=_("Su enabled"))
su_method = models.CharField(max_length=32, blank=True, null=True, verbose_name=_("Su method"))
automation = models.OneToOneField(
PlatformAutomation, on_delete=models.CASCADE, related_name='platform',
blank=True, null=True, verbose_name=_("Automation")
)
custom_fields = models.JSONField(null=True, default=list, verbose_name=_("Custom fields"))
_automation_id = models.UUIDField(null=True, editable=False)
@property
def type_constraints(self):