diff --git a/netbox/dcim/migrations/0145_site_remove_deprecated_fields.py b/netbox/dcim/migrations/0145_site_remove_deprecated_fields.py index 29353107c..6de7dc4e5 100644 --- a/netbox/dcim/migrations/0145_site_remove_deprecated_fields.py +++ b/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',