Explorar el Código

Closes #6179: Enable natural ordering for virtual machines

jeremystretch hace 4 años
padre
commit
9ed76400de

+ 1 - 0
docs/release-notes/version-2.11.md

@@ -4,6 +4,7 @@
 
 ### Enhancements
 
+* [#6179](https://github.com/netbox-community/netbox/issues/6179) - Enable natural ordering for virtual machines
 * [#6189](https://github.com/netbox-community/netbox/issues/6189) - Add ability to search for locations by name or description
 * [#6190](https://github.com/netbox-community/netbox/issues/6190) - Allow filtering devices with no location assigned
 

+ 32 - 0
netbox/virtualization/migrations/0023_virtualmachine_natural_ordering.py

@@ -0,0 +1,32 @@
+from django.db import migrations
+import utilities.fields
+import utilities.ordering
+
+
+def naturalize_virtualmachines(apps, schema_editor):
+    VirtualMachine = apps.get_model('virtualization', 'VirtualMachine')
+    for name in VirtualMachine.objects.values_list('name', flat=True).order_by('name').distinct():
+        VirtualMachine.objects.filter(name=name).update(_name=utilities.ordering.naturalize(name, max_length=100))
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('virtualization', '0022_vminterface_parent'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='virtualmachine',
+            options={'ordering': ('_name', 'pk')},
+        ),
+        migrations.AddField(
+            model_name='virtualmachine',
+            name='_name',
+            field=utilities.fields.NaturalOrderingField('name', max_length=100, blank=True, naturalize_function=utilities.ordering.naturalize),
+        ),
+        migrations.RunPython(
+            code=naturalize_virtualmachines,
+            reverse_code=migrations.RunPython.noop
+        ),
+    ]

+ 6 - 1
netbox/virtualization/models.py

@@ -226,6 +226,11 @@ class VirtualMachine(PrimaryModel, ConfigContextModel):
     name = models.CharField(
         max_length=64
     )
+    _name = NaturalOrderingField(
+        target_field='name',
+        max_length=100,
+        blank=True
+    )
     status = models.CharField(
         max_length=50,
         choices=VirtualMachineStatusChoices,
@@ -296,7 +301,7 @@ class VirtualMachine(PrimaryModel, ConfigContextModel):
     ]
 
     class Meta:
-        ordering = ('name', 'pk')  # Name may be non-unique
+        ordering = ('_name', 'pk')  # Name may be non-unique
         unique_together = [
             ['cluster', 'tenant', 'name']
         ]