|
@@ -9,10 +9,12 @@ from django.db.models import Count, Q, ObjectDoesNotExist
|
|
|
|
|
|
from extras.rpc import RPC_CLIENTS
|
|
|
from utilities.fields import NullableCharField
|
|
|
+from utilities.managers import NaturalOrderByManager
|
|
|
from utilities.models import CreatedUpdatedModel
|
|
|
|
|
|
from .fields import ASNField, MACAddressField
|
|
|
|
|
|
+
|
|
|
RACK_FACE_FRONT = 0
|
|
|
RACK_FACE_REAR = 1
|
|
|
RACK_FACE_CHOICES = [
|
|
@@ -137,6 +139,12 @@ def order_interfaces(queryset, sql_col, primary_ordering=tuple()):
|
|
|
}).order_by(*ordering)
|
|
|
|
|
|
|
|
|
+class SiteManager(NaturalOrderByManager):
|
|
|
+
|
|
|
+ def get_queryset(self):
|
|
|
+ return self.natural_order_by('name')
|
|
|
+
|
|
|
+
|
|
|
class Site(CreatedUpdatedModel):
|
|
|
"""
|
|
|
A Site represents a geographic location within a network; typically a building or campus. The optional facility
|
|
@@ -150,6 +158,8 @@ class Site(CreatedUpdatedModel):
|
|
|
shipping_address = models.CharField(max_length=200, blank=True)
|
|
|
comments = models.TextField(blank=True)
|
|
|
|
|
|
+ objects = SiteManager()
|
|
|
+
|
|
|
class Meta:
|
|
|
ordering = ['name']
|
|
|
|
|
@@ -212,6 +222,12 @@ class RackGroup(models.Model):
|
|
|
return "{}?group_id={}".format(reverse('dcim:rack_list'), self.pk)
|
|
|
|
|
|
|
|
|
+class RackManager(NaturalOrderByManager):
|
|
|
+
|
|
|
+ def get_queryset(self):
|
|
|
+ return self.natural_order_by('site__name', 'name')
|
|
|
+
|
|
|
+
|
|
|
class Rack(CreatedUpdatedModel):
|
|
|
"""
|
|
|
Devices are housed within Racks. Each rack has a defined height measured in rack units, and a front and rear face.
|
|
@@ -224,6 +240,8 @@ class Rack(CreatedUpdatedModel):
|
|
|
u_height = models.PositiveSmallIntegerField(default=42, verbose_name='Height (U)')
|
|
|
comments = models.TextField(blank=True)
|
|
|
|
|
|
+ objects = RackManager()
|
|
|
+
|
|
|
class Meta:
|
|
|
ordering = ['site', 'name']
|
|
|
unique_together = [
|
|
@@ -583,6 +601,12 @@ class Platform(models.Model):
|
|
|
return "{}?platform={}".format(reverse('dcim:device_list'), self.slug)
|
|
|
|
|
|
|
|
|
+class DeviceManager(NaturalOrderByManager):
|
|
|
+
|
|
|
+ def get_queryset(self):
|
|
|
+ return self.natural_order_by('name')
|
|
|
+
|
|
|
+
|
|
|
class Device(CreatedUpdatedModel):
|
|
|
"""
|
|
|
A Device represents a piece of physical hardware mounted within a Rack. Each Device is assigned a DeviceType,
|
|
@@ -612,6 +636,8 @@ class Device(CreatedUpdatedModel):
|
|
|
blank=True, null=True, verbose_name='Primary IPv6')
|
|
|
comments = models.TextField(blank=True)
|
|
|
|
|
|
+ objects = DeviceManager()
|
|
|
+
|
|
|
class Meta:
|
|
|
ordering = ['name']
|
|
|
unique_together = ['rack', 'position', 'face']
|