mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Convert device component templates to use NaturalOrderingField
This commit is contained in:
parent
12d09e2274
commit
705c352885
@ -0,0 +1,131 @@
|
|||||||
|
from django.db import migrations
|
||||||
|
import utilities.fields
|
||||||
|
import utilities.ordering
|
||||||
|
|
||||||
|
|
||||||
|
def _update_model_names(model):
|
||||||
|
# Update each unique field value in bulk
|
||||||
|
for name in model.objects.values_list('name', flat=True).order_by('name').distinct():
|
||||||
|
model.objects.filter(name=name).update(_name=utilities.ordering.naturalize(name))
|
||||||
|
|
||||||
|
|
||||||
|
def naturalize_consoleporttemplates(apps, schema_editor):
|
||||||
|
_update_model_names(apps.get_model('dcim', 'ConsolePortTemplate'))
|
||||||
|
|
||||||
|
|
||||||
|
def naturalize_consoleserverporttemplates(apps, schema_editor):
|
||||||
|
_update_model_names(apps.get_model('dcim', 'ConsoleServerPortTemplate'))
|
||||||
|
|
||||||
|
|
||||||
|
def naturalize_powerporttemplates(apps, schema_editor):
|
||||||
|
_update_model_names(apps.get_model('dcim', 'PowerPortTemplate'))
|
||||||
|
|
||||||
|
|
||||||
|
def naturalize_poweroutlettemplates(apps, schema_editor):
|
||||||
|
_update_model_names(apps.get_model('dcim', 'PowerPortTemplate'))
|
||||||
|
|
||||||
|
|
||||||
|
def naturalize_frontporttemplates(apps, schema_editor):
|
||||||
|
_update_model_names(apps.get_model('dcim', 'FrontPortTemplate'))
|
||||||
|
|
||||||
|
|
||||||
|
def naturalize_rearporttemplates(apps, schema_editor):
|
||||||
|
_update_model_names(apps.get_model('dcim', 'RearPortTemplate'))
|
||||||
|
|
||||||
|
|
||||||
|
def naturalize_devicebaytemplates(apps, schema_editor):
|
||||||
|
_update_model_names(apps.get_model('dcim', 'DeviceBayTemplate'))
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('dcim', '0093_device_component_ordering'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='consoleporttemplate',
|
||||||
|
options={'ordering': ('device_type', '_name')},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='consoleserverporttemplate',
|
||||||
|
options={'ordering': ('device_type', '_name')},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='devicebaytemplate',
|
||||||
|
options={'ordering': ('device_type', '_name')},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='frontporttemplate',
|
||||||
|
options={'ordering': ('device_type', '_name')},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='poweroutlettemplate',
|
||||||
|
options={'ordering': ('device_type', '_name')},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='powerporttemplate',
|
||||||
|
options={'ordering': ('device_type', '_name')},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='rearporttemplate',
|
||||||
|
options={'ordering': ('device_type', '_name')},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='consoleporttemplate',
|
||||||
|
name='_name',
|
||||||
|
field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='consoleserverporttemplate',
|
||||||
|
name='_name',
|
||||||
|
field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='devicebaytemplate',
|
||||||
|
name='_name',
|
||||||
|
field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='frontporttemplate',
|
||||||
|
name='_name',
|
||||||
|
field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='poweroutlettemplate',
|
||||||
|
name='_name',
|
||||||
|
field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='powerporttemplate',
|
||||||
|
name='_name',
|
||||||
|
field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='rearporttemplate',
|
||||||
|
name='_name',
|
||||||
|
field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize),
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
code=naturalize_consoleporttemplates
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
code=naturalize_consoleserverporttemplates
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
code=naturalize_powerporttemplates
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
code=naturalize_poweroutlettemplates
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
code=naturalize_frontporttemplates
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
code=naturalize_rearporttemplates
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
code=naturalize_devicebaytemplates
|
||||||
|
),
|
||||||
|
]
|
@ -6,7 +6,7 @@ from dcim.choices import *
|
|||||||
from dcim.constants import *
|
from dcim.constants import *
|
||||||
from dcim.managers import InterfaceManager
|
from dcim.managers import InterfaceManager
|
||||||
from extras.models import ObjectChange
|
from extras.models import ObjectChange
|
||||||
from utilities.managers import NaturalOrderingManager
|
from utilities.fields import NaturalOrderingField
|
||||||
from utilities.utils import serialize_object
|
from utilities.utils import serialize_object
|
||||||
from .device_components import (
|
from .device_components import (
|
||||||
ConsolePort, ConsoleServerPort, DeviceBay, FrontPort, Interface, PowerOutlet, PowerPort, RearPort,
|
ConsolePort, ConsoleServerPort, DeviceBay, FrontPort, Interface, PowerOutlet, PowerPort, RearPort,
|
||||||
@ -58,17 +58,20 @@ class ConsolePortTemplate(ComponentTemplateModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=50
|
max_length=50
|
||||||
)
|
)
|
||||||
|
_name = NaturalOrderingField(
|
||||||
|
target_field='name',
|
||||||
|
max_length=100,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
choices=ConsolePortTypeChoices,
|
choices=ConsolePortTypeChoices,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = NaturalOrderingManager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['device_type', 'name']
|
ordering = ('device_type', '_name')
|
||||||
unique_together = ['device_type', 'name']
|
unique_together = ('device_type', 'name')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -93,17 +96,20 @@ class ConsoleServerPortTemplate(ComponentTemplateModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=50
|
max_length=50
|
||||||
)
|
)
|
||||||
|
_name = NaturalOrderingField(
|
||||||
|
target_field='name',
|
||||||
|
max_length=100,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
choices=ConsolePortTypeChoices,
|
choices=ConsolePortTypeChoices,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = NaturalOrderingManager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['device_type', 'name']
|
ordering = ('device_type', '_name')
|
||||||
unique_together = ['device_type', 'name']
|
unique_together = ('device_type', 'name')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -128,6 +134,11 @@ class PowerPortTemplate(ComponentTemplateModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=50
|
max_length=50
|
||||||
)
|
)
|
||||||
|
_name = NaturalOrderingField(
|
||||||
|
target_field='name',
|
||||||
|
max_length=100,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
choices=PowerPortTypeChoices,
|
choices=PowerPortTypeChoices,
|
||||||
@ -146,11 +157,9 @@ class PowerPortTemplate(ComponentTemplateModel):
|
|||||||
help_text="Allocated power draw (watts)"
|
help_text="Allocated power draw (watts)"
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = NaturalOrderingManager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['device_type', 'name']
|
ordering = ('device_type', '_name')
|
||||||
unique_together = ['device_type', 'name']
|
unique_together = ('device_type', 'name')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -176,6 +185,11 @@ class PowerOutletTemplate(ComponentTemplateModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=50
|
max_length=50
|
||||||
)
|
)
|
||||||
|
_name = NaturalOrderingField(
|
||||||
|
target_field='name',
|
||||||
|
max_length=100,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
choices=PowerOutletTypeChoices,
|
choices=PowerOutletTypeChoices,
|
||||||
@ -195,11 +209,9 @@ class PowerOutletTemplate(ComponentTemplateModel):
|
|||||||
help_text="Phase (for three-phase feeds)"
|
help_text="Phase (for three-phase feeds)"
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = NaturalOrderingManager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['device_type', 'name']
|
ordering = ('device_type', '_name')
|
||||||
unique_together = ['device_type', 'name']
|
unique_together = ('device_type', 'name')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -276,6 +288,11 @@ class FrontPortTemplate(ComponentTemplateModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=64
|
max_length=64
|
||||||
)
|
)
|
||||||
|
_name = NaturalOrderingField(
|
||||||
|
target_field='name',
|
||||||
|
max_length=100,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
choices=PortTypeChoices
|
choices=PortTypeChoices
|
||||||
@ -290,14 +307,12 @@ class FrontPortTemplate(ComponentTemplateModel):
|
|||||||
validators=[MinValueValidator(1), MaxValueValidator(64)]
|
validators=[MinValueValidator(1), MaxValueValidator(64)]
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = NaturalOrderingManager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['device_type', 'name']
|
ordering = ('device_type', '_name')
|
||||||
unique_together = [
|
unique_together = (
|
||||||
['device_type', 'name'],
|
('device_type', 'name'),
|
||||||
['rear_port', 'rear_port_position'],
|
('rear_port', 'rear_port_position'),
|
||||||
]
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -344,6 +359,11 @@ class RearPortTemplate(ComponentTemplateModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=64
|
max_length=64
|
||||||
)
|
)
|
||||||
|
_name = NaturalOrderingField(
|
||||||
|
target_field='name',
|
||||||
|
max_length=100,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
choices=PortTypeChoices
|
choices=PortTypeChoices
|
||||||
@ -353,11 +373,9 @@ class RearPortTemplate(ComponentTemplateModel):
|
|||||||
validators=[MinValueValidator(1), MaxValueValidator(64)]
|
validators=[MinValueValidator(1), MaxValueValidator(64)]
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = NaturalOrderingManager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['device_type', 'name']
|
ordering = ('device_type', '_name')
|
||||||
unique_together = ['device_type', 'name']
|
unique_together = ('device_type', 'name')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -383,12 +401,15 @@ class DeviceBayTemplate(ComponentTemplateModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=50
|
max_length=50
|
||||||
)
|
)
|
||||||
|
_name = NaturalOrderingField(
|
||||||
objects = NaturalOrderingManager()
|
target_field='name',
|
||||||
|
max_length=100,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['device_type', 'name']
|
ordering = ('device_type', '_name')
|
||||||
unique_together = ['device_type', 'name']
|
unique_together = ('device_type', 'name')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
Loading…
Reference in New Issue
Block a user