|
|
@@ -6,7 +6,7 @@ from dcim.choices import *
|
|
|
from dcim.constants import *
|
|
|
from dcim.managers import InterfaceManager
|
|
|
from extras.models import ObjectChange
|
|
|
-from utilities.managers import NaturalOrderingManager
|
|
|
+from utilities.fields import NaturalOrderingField
|
|
|
from utilities.utils import serialize_object
|
|
|
from .device_components import (
|
|
|
ConsolePort, ConsoleServerPort, DeviceBay, FrontPort, Interface, PowerOutlet, PowerPort, RearPort,
|
|
|
@@ -58,17 +58,20 @@ class ConsolePortTemplate(ComponentTemplateModel):
|
|
|
name = models.CharField(
|
|
|
max_length=50
|
|
|
)
|
|
|
+ _name = NaturalOrderingField(
|
|
|
+ target_field='name',
|
|
|
+ max_length=100,
|
|
|
+ blank=True
|
|
|
+ )
|
|
|
type = models.CharField(
|
|
|
max_length=50,
|
|
|
choices=ConsolePortTypeChoices,
|
|
|
blank=True
|
|
|
)
|
|
|
|
|
|
- objects = NaturalOrderingManager()
|
|
|
-
|
|
|
class Meta:
|
|
|
- ordering = ['device_type', 'name']
|
|
|
- unique_together = ['device_type', 'name']
|
|
|
+ ordering = ('device_type', '_name')
|
|
|
+ unique_together = ('device_type', 'name')
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -93,17 +96,20 @@ class ConsoleServerPortTemplate(ComponentTemplateModel):
|
|
|
name = models.CharField(
|
|
|
max_length=50
|
|
|
)
|
|
|
+ _name = NaturalOrderingField(
|
|
|
+ target_field='name',
|
|
|
+ max_length=100,
|
|
|
+ blank=True
|
|
|
+ )
|
|
|
type = models.CharField(
|
|
|
max_length=50,
|
|
|
choices=ConsolePortTypeChoices,
|
|
|
blank=True
|
|
|
)
|
|
|
|
|
|
- objects = NaturalOrderingManager()
|
|
|
-
|
|
|
class Meta:
|
|
|
- ordering = ['device_type', 'name']
|
|
|
- unique_together = ['device_type', 'name']
|
|
|
+ ordering = ('device_type', '_name')
|
|
|
+ unique_together = ('device_type', 'name')
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -128,6 +134,11 @@ class PowerPortTemplate(ComponentTemplateModel):
|
|
|
name = models.CharField(
|
|
|
max_length=50
|
|
|
)
|
|
|
+ _name = NaturalOrderingField(
|
|
|
+ target_field='name',
|
|
|
+ max_length=100,
|
|
|
+ blank=True
|
|
|
+ )
|
|
|
type = models.CharField(
|
|
|
max_length=50,
|
|
|
choices=PowerPortTypeChoices,
|
|
|
@@ -146,11 +157,9 @@ class PowerPortTemplate(ComponentTemplateModel):
|
|
|
help_text="Allocated power draw (watts)"
|
|
|
)
|
|
|
|
|
|
- objects = NaturalOrderingManager()
|
|
|
-
|
|
|
class Meta:
|
|
|
- ordering = ['device_type', 'name']
|
|
|
- unique_together = ['device_type', 'name']
|
|
|
+ ordering = ('device_type', '_name')
|
|
|
+ unique_together = ('device_type', 'name')
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -176,6 +185,11 @@ class PowerOutletTemplate(ComponentTemplateModel):
|
|
|
name = models.CharField(
|
|
|
max_length=50
|
|
|
)
|
|
|
+ _name = NaturalOrderingField(
|
|
|
+ target_field='name',
|
|
|
+ max_length=100,
|
|
|
+ blank=True
|
|
|
+ )
|
|
|
type = models.CharField(
|
|
|
max_length=50,
|
|
|
choices=PowerOutletTypeChoices,
|
|
|
@@ -195,11 +209,9 @@ class PowerOutletTemplate(ComponentTemplateModel):
|
|
|
help_text="Phase (for three-phase feeds)"
|
|
|
)
|
|
|
|
|
|
- objects = NaturalOrderingManager()
|
|
|
-
|
|
|
class Meta:
|
|
|
- ordering = ['device_type', 'name']
|
|
|
- unique_together = ['device_type', 'name']
|
|
|
+ ordering = ('device_type', '_name')
|
|
|
+ unique_together = ('device_type', 'name')
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -276,6 +288,11 @@ class FrontPortTemplate(ComponentTemplateModel):
|
|
|
name = models.CharField(
|
|
|
max_length=64
|
|
|
)
|
|
|
+ _name = NaturalOrderingField(
|
|
|
+ target_field='name',
|
|
|
+ max_length=100,
|
|
|
+ blank=True
|
|
|
+ )
|
|
|
type = models.CharField(
|
|
|
max_length=50,
|
|
|
choices=PortTypeChoices
|
|
|
@@ -290,14 +307,12 @@ class FrontPortTemplate(ComponentTemplateModel):
|
|
|
validators=[MinValueValidator(1), MaxValueValidator(64)]
|
|
|
)
|
|
|
|
|
|
- objects = NaturalOrderingManager()
|
|
|
-
|
|
|
class Meta:
|
|
|
- ordering = ['device_type', 'name']
|
|
|
- unique_together = [
|
|
|
- ['device_type', 'name'],
|
|
|
- ['rear_port', 'rear_port_position'],
|
|
|
- ]
|
|
|
+ ordering = ('device_type', '_name')
|
|
|
+ unique_together = (
|
|
|
+ ('device_type', 'name'),
|
|
|
+ ('rear_port', 'rear_port_position'),
|
|
|
+ )
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -344,6 +359,11 @@ class RearPortTemplate(ComponentTemplateModel):
|
|
|
name = models.CharField(
|
|
|
max_length=64
|
|
|
)
|
|
|
+ _name = NaturalOrderingField(
|
|
|
+ target_field='name',
|
|
|
+ max_length=100,
|
|
|
+ blank=True
|
|
|
+ )
|
|
|
type = models.CharField(
|
|
|
max_length=50,
|
|
|
choices=PortTypeChoices
|
|
|
@@ -353,11 +373,9 @@ class RearPortTemplate(ComponentTemplateModel):
|
|
|
validators=[MinValueValidator(1), MaxValueValidator(64)]
|
|
|
)
|
|
|
|
|
|
- objects = NaturalOrderingManager()
|
|
|
-
|
|
|
class Meta:
|
|
|
- ordering = ['device_type', 'name']
|
|
|
- unique_together = ['device_type', 'name']
|
|
|
+ ordering = ('device_type', '_name')
|
|
|
+ unique_together = ('device_type', 'name')
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -383,12 +401,15 @@ class DeviceBayTemplate(ComponentTemplateModel):
|
|
|
name = models.CharField(
|
|
|
max_length=50
|
|
|
)
|
|
|
-
|
|
|
- objects = NaturalOrderingManager()
|
|
|
+ _name = NaturalOrderingField(
|
|
|
+ target_field='name',
|
|
|
+ max_length=100,
|
|
|
+ blank=True
|
|
|
+ )
|
|
|
|
|
|
class Meta:
|
|
|
- ordering = ['device_type', 'name']
|
|
|
- unique_together = ['device_type', 'name']
|
|
|
+ ordering = ('device_type', '_name')
|
|
|
+ unique_together = ('device_type', 'name')
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|