Просмотр исходного кода

Fixes #13741: Enforce unique names for inventory items with no parent item

Jeremy Stretch 2 лет назад
Родитель
Сommit
68966db23d

+ 17 - 0
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'),
+        ),
+    ]

+ 5 - 0
netbox/dcim/models/device_components.py

@@ -1246,6 +1246,11 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin):
                 fields=('device', 'parent', 'name'),
                 fields=('device', 'parent', 'name'),
                 name='%(app_label)s_%(class)s_unique_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 = _('inventory item')
         verbose_name_plural = _('inventory items')
         verbose_name_plural = _('inventory items')