Przeglądaj źródła

#21488 - Replace MPTT wtih PostgreSQL Ltree

Arthur 1 dzień temu
rodzic
commit
89ff96760f

+ 71 - 1
netbox/dcim/migrations/0234_ltree_paths.py

@@ -13,9 +13,10 @@ InventoryItem, InventoryItemTemplate) this migration:
 6. Drops the legacy MPTT columns (lft, rght, tree_id, level).
 7. Adds a GiST index on the `path` column for efficient `@>` / `<@` lookups.
 """
+import django.db.models.deletion
 from django.contrib.postgres.indexes import GistIndex
 from django.contrib.postgres.operations import CreateExtension
-from django.db import migrations
+from django.db import migrations, models
 
 import netbox.models.ltree
 from netbox.models.ltree import InstallLtreeTriggers
@@ -61,6 +62,75 @@ class Migration(migrations.Migration):
     ]
 
     operations = [
+        # Switch parent from mptt.fields.TreeForeignKey to django.db.models.ForeignKey.
+        # This is a no-op at the SQL level (TreeForeignKey is a subclass of
+        # ForeignKey producing the same column) but reconciles the migration state
+        # with the model definitions now that django-mptt is no longer used at runtime.
+        migrations.AlterField(
+            model_name='devicerole',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='dcim.devicerole',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='inventoryitem',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='child_items', to='dcim.inventoryitem',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='inventoryitemtemplate',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='child_items', to='dcim.inventoryitemtemplate',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='location',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='dcim.location',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='modulebay',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='dcim.modulebay',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='platform',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='dcim.platform',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='region',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='dcim.region',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='sitegroup',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='dcim.sitegroup',
+            ),
+        ),
+
         # 1. Enable the ltree extension (idempotent — CreateExtension emits IF NOT EXISTS)
         CreateExtension('ltree'),
 

+ 21 - 1
netbox/tenancy/migrations/0025_ltree_paths.py

@@ -1,7 +1,8 @@
 """Replace django-mptt with PostgreSQL ltree for tenancy's hierarchical models."""
+import django.db.models.deletion
 from django.contrib.postgres.indexes import GistIndex
 from django.contrib.postgres.operations import CreateExtension
-from django.db import migrations
+from django.db import migrations, models
 
 import netbox.models.ltree
 from netbox.models.ltree import InstallLtreeTriggers
@@ -33,6 +34,25 @@ class Migration(migrations.Migration):
     ]
 
     operations = [
+        # Switch parent from mptt.fields.TreeForeignKey to django.db.models.ForeignKey.
+        # No-op at the SQL level; reconciles migration state with model definitions.
+        migrations.AlterField(
+            model_name='contactgroup',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='tenancy.contactgroup',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='tenantgroup',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='tenancy.tenantgroup',
+            ),
+        ),
+
         # Enable the ltree extension (idempotent — CreateExtension emits IF NOT EXISTS)
         CreateExtension('ltree'),
 

+ 13 - 1
netbox/wireless/migrations/0020_ltree_paths.py

@@ -1,7 +1,8 @@
 """Replace django-mptt with PostgreSQL ltree for wireless's hierarchical models."""
+import django.db.models.deletion
 from django.contrib.postgres.indexes import GistIndex
 from django.contrib.postgres.operations import CreateExtension
-from django.db import migrations
+from django.db import migrations, models
 
 import netbox.models.ltree
 from netbox.models.ltree import InstallLtreeTriggers
@@ -18,6 +19,17 @@ class Migration(migrations.Migration):
     ]
 
     operations = [
+        # Switch parent from mptt.fields.TreeForeignKey to django.db.models.ForeignKey.
+        # No-op at the SQL level; reconciles migration state with model definitions.
+        migrations.AlterField(
+            model_name='wirelesslangroup',
+            name='parent',
+            field=models.ForeignKey(
+                blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
+                related_name='children', to='wireless.wirelesslangroup',
+            ),
+        ),
+
         # Enable the ltree extension (idempotent — CreateExtension emits IF NOT EXISTS)
         CreateExtension('ltree'),