diff --git a/apps/assets/migrations/0115_auto_20230417_1425.py b/apps/assets/migrations/0115_auto_20230417_1425.py new file mode 100644 index 000000000..544891a03 --- /dev/null +++ b/apps/assets/migrations/0115_auto_20230417_1425.py @@ -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), + ] diff --git a/apps/assets/models/platform.py b/apps/assets/models/platform.py index 4927ce793..411b9ded4 100644 --- a/apps/assets/models/platform.py +++ b/apps/assets/models/platform.py @@ -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):