From 68966db23d22edcd81423e717a4157428ebfb896 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 15 Sep 2023 10:22:46 -0400 Subject: [PATCH] Fixes #13741: Enforce unique names for inventory items with no parent item --- .../0182_inventoryitem_uniqueness_fix.py | 17 +++++++++++++++++ netbox/dcim/models/device_components.py | 5 +++++ 2 files changed, 22 insertions(+) create mode 100644 netbox/dcim/migrations/0182_inventoryitem_uniqueness_fix.py diff --git a/netbox/dcim/migrations/0182_inventoryitem_uniqueness_fix.py b/netbox/dcim/migrations/0182_inventoryitem_uniqueness_fix.py new file mode 100644 index 000000000..85cd2196b --- /dev/null +++ b/netbox/dcim/migrations/0182_inventoryitem_uniqueness_fix.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.5 on 2023-09-15 14:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0181_rename_device_role_device_role'), + ] + + operations = [ + migrations.AddConstraint( + model_name='inventoryitem', + constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('device', 'name'), name='dcim_inventoryitem_unique_device_name'), + ), + ] diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index f42ae5895..76c378cc0 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -1246,6 +1246,11 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): fields=('device', 'parent', 'name'), name='%(app_label)s_%(class)s_unique_device_parent_name' ), + models.UniqueConstraint( + fields=('device', 'name'), + name='%(app_label)s_%(class)s_unique_device_name', + condition=Q(parent__isnull=True) + ), ) verbose_name = _('inventory item') verbose_name_plural = _('inventory items')