From e583ffa3e41e95d160fd15e75b66e747f3120536 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 29 Jul 2024 13:30:34 -0400 Subject: [PATCH] Adjust uniqueness constraints --- ..._modulebaytemplate_module_type_and_more.py | 47 ------------------- netbox/dcim/migrations/0190_nested_modules.py | 44 +++++++++++++++++ .../dcim/models/device_component_templates.py | 2 +- netbox/dcim/models/device_components.py | 8 +++- 4 files changed, 52 insertions(+), 49 deletions(-) delete mode 100644 netbox/dcim/migrations/0189_modulebay_module_modulebaytemplate_module_type_and_more.py create mode 100644 netbox/dcim/migrations/0190_nested_modules.py diff --git a/netbox/dcim/migrations/0189_modulebay_module_modulebaytemplate_module_type_and_more.py b/netbox/dcim/migrations/0189_modulebay_module_modulebaytemplate_module_type_and_more.py deleted file mode 100644 index 3aa83f9db..000000000 --- a/netbox/dcim/migrations/0189_modulebay_module_modulebaytemplate_module_type_and_more.py +++ /dev/null @@ -1,47 +0,0 @@ -# Generated by Django 5.0.7 on 2024-07-23 10:12 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0189_moduletype_airflow_rack_airflow_racktype_airflow'), - ] - - operations = [ - migrations.AddField( - model_name='modulebay', - name='module', - field=models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name='%(class)ss', - to='dcim.module', - ), - ), - migrations.AddField( - model_name='modulebaytemplate', - name='module_type', - field=models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name='%(class)ss', - to='dcim.moduletype', - ), - ), - migrations.AlterField( - model_name='modulebaytemplate', - name='device_type', - field=models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name='%(class)ss', - to='dcim.devicetype', - ), - ), - ] diff --git a/netbox/dcim/migrations/0190_nested_modules.py b/netbox/dcim/migrations/0190_nested_modules.py new file mode 100644 index 000000000..71b06ea36 --- /dev/null +++ b/netbox/dcim/migrations/0190_nested_modules.py @@ -0,0 +1,44 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0189_moduletype_airflow_rack_airflow_racktype_airflow'), + ('extras', '0119_eventrule_event_types'), + ] + + operations = [ + migrations.AlterModelOptions( + name='modulebaytemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.RemoveConstraint( + model_name='modulebay', + name='dcim_modulebay_unique_device_name', + ), + migrations.AddField( + model_name='modulebay', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='modulebaytemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AlterField( + model_name='modulebaytemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AddConstraint( + model_name='modulebay', + constraint=models.UniqueConstraint(fields=('device', 'module', 'name'), name='dcim_modulebay_unique_device_module_name'), + ), + migrations.AddConstraint( + model_name='modulebaytemplate', + constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_modulebaytemplate_unique_module_type_name'), + ), + ] diff --git a/netbox/dcim/models/device_component_templates.py b/netbox/dcim/models/device_component_templates.py index 87ea31d6f..28a403be0 100644 --- a/netbox/dcim/models/device_component_templates.py +++ b/netbox/dcim/models/device_component_templates.py @@ -668,7 +668,7 @@ class ModuleBayTemplate(ModularComponentTemplateModel): component_model = ModuleBay - class Meta(ComponentTemplateModel.Meta): + class Meta(ModularComponentTemplateModel.Meta): verbose_name = _('module bay template') verbose_name_plural = _('module bay templates') diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index ed6e70976..adc543d79 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -1100,7 +1100,13 @@ class ModuleBay(ModularComponentModel, TrackingModelMixin): clone_fields = ('device',) - class Meta(ComponentModel.Meta): + class Meta(ModularComponentModel.Meta): + constraints = ( + models.UniqueConstraint( + fields=('device', 'module', 'name'), + name='%(app_label)s_%(class)s_unique_device_module_name' + ), + ) verbose_name = _('module bay') verbose_name_plural = _('module bays')