Files
Netbox-Utilities/netbox_utilities/models.py
T

82 lines
2.6 KiB
Python

from django.conf import settings
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
class NavigationPreference(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="netbox_utilities_navigation",
)
menu_order = models.JSONField(default=list, blank=True)
hidden_menus = models.JSONField(default=list, blank=True)
sidebar_collapsed = models.BooleanField(default=False)
sidebar_width = models.PositiveSmallIntegerField(
default=288,
validators=[MinValueValidator(216), MaxValueValidator(408)],
)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ("user",)
def __str__(self):
return f"Navigation for {self.user}"
class UtilitiesSettings(models.Model):
singleton_id = models.PositiveSmallIntegerField(
primary_key=True,
default=1,
editable=False,
validators=[MinValueValidator(1)],
)
tenant_filter_enabled = models.BooleanField(default=True)
tenant_required = models.BooleanField(default=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = "NetBox Utilities setting"
verbose_name_plural = "NetBox Utilities settings"
def save(self, *args, **kwargs):
self.singleton_id = 1
return super().save(*args, **kwargs)
def __str__(self):
return "NetBox Utilities settings"
class DeviceRackPlacement(models.Model):
WIDTH_CHOICES = (
(2, "1/2 Rackbreite"),
(3, "1/3 Rackbreite"),
(4, "1/4 Rackbreite"),
)
device = models.OneToOneField(
"dcim.Device",
on_delete=models.CASCADE,
related_name="netbox_utilities_rack_placement",
)
width = models.PositiveSmallIntegerField(choices=WIDTH_CHOICES)
horizontal_position = models.PositiveSmallIntegerField(
validators=[MinValueValidator(1), MaxValueValidator(4)],
help_text="Position von links innerhalb der Rackbreite.",
)
updated = models.DateTimeField(auto_now=True)
class Meta:
constraints = (
models.CheckConstraint(
condition=models.Q(width__gte=models.F("horizontal_position")),
name="netbox_utilities_placement_position_within_width",
),
)
verbose_name = "Gerätebreite im Rack"
verbose_name_plural = "Gerätebreiten im Rack"
def __str__(self):
return f"{self.device}: 1/{self.width}, Position {self.horizontal_position}"