Coverage for servermodel / models.py: 91%
33 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
1from django.db import models
2from django.urls import reverse
3from simple_history.models import HistoricalRecords
4from vendor.models import Model as VendorModel
5from django.contrib.auth.models import Group
7from . import app_label
10class ServerModelManager(models.Manager):
11 def get_by_natural_key(self, vendor, name):
12 if isinstance(vendor, (list, tuple)):
13 vendor = vendor[0]
14 return self.get(vendor__name=vendor, name=name)
17class Model(models.Model):
18 objects = ServerModelManager()
19 history = HistoricalRecords()
20 name = models.CharField(max_length=45)
21 vendor = models.ForeignKey(
22 VendorModel,
23 null=False,
24 default=None,
25 related_name="%s_set" % app_label,
26 related_query_name="%s" % app_label,
27 on_delete=models.PROTECT,
28 )
30 group = models.ForeignKey(
31 Group,
32 editable=False,
33 blank=True,
34 null=True,
35 on_delete=models.PROTECT,
36 related_name="servermodels",
37 )
39 def __str__(self):
40 return "{} {}".format(self.vendor.name, self.name)
42 def natural_key(self):
43 return self.vendor.natural_key() + (self.name,)
45 natural_key.dependencies = ["vendor.Model"]
47 @classmethod
48 def get_natural_key_fields(cls):
49 return ["vendor__name", "name"]
51 @classmethod
52 def get_natural_key_info(cls):
53 return [("vendor", VendorModel), ("name", None)]
55 def get_absolute_url(self):
57 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk})
59 class Meta:
60 db_table = "{}_{}".format("sm", app_label)
61 constraints = [
62 models.UniqueConstraint(
63 fields=["vendor", "name"], name="unique_sm_servermodel_vendor_name"
64 ),
65 models.UniqueConstraint(
66 fields=["vendor", "name", "group"],
67 name="unique_sm_servermodel_vendor_name_group",
68 ),
69 ]