فهرست منبع

Add migration safeguard to prevent accidental destruction of data

jeremystretch 3 سال پیش
والد
کامیت
8b92bc6c4a
1فایلهای تغییر یافته به همراه26 افزوده شده و 0 حذف شده
  1. 26 0
      netbox/dcim/migrations/0145_site_remove_deprecated_fields.py

+ 26 - 0
netbox/dcim/migrations/0145_site_remove_deprecated_fields.py

@@ -1,4 +1,26 @@
 from django.db import migrations
+from django.db.utils import DataError
+
+
+def check_legacy_data(apps, schema_editor):
+    """
+    Abort the migration if any legacy site fields still contain data.
+    """
+    Site = apps.get_model('dcim', 'Site')
+
+    if site_count := Site.objects.exclude(asn__isnull=True).count():
+        raise DataError(
+            f"Unable to proceed with deleting asn field from Site model: Found {site_count} sites with "
+            f"legacy ASN data. Please ensure all legacy site ASN data has been migrated to ASN objects "
+            f"before proceeding."
+        )
+
+    if site_count := Site.objects.exclude(contact_name='', contact_phone='', contact_email='').count():
+        raise DataError(
+            f"Unable to proceed with deleting contact fields from Site model: Found {site_count} sites "
+            f"with legacy contact data. Please ensure all legacy site contact data has been migrated to "
+            f"contact objects before proceeding."
+        )
 
 
 class Migration(migrations.Migration):
@@ -8,6 +30,10 @@ class Migration(migrations.Migration):
     ]
 
     operations = [
+        migrations.RunPython(
+            code=check_legacy_data,
+            reverse_code=migrations.RunPython.noop
+        ),
         migrations.RemoveField(
             model_name='site',
             name='asn',