Coverage for clusterpackagetype/models.py: 94%
31 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +0000
1from django.db import models
2from django.db.models import Q
3from django.urls import reverse
4from simple_history.models import HistoricalRecords
5from django.contrib.auth.models import Group
6from taggit.managers import TaggableManager
8from . import app_label
11class ClusterPackageTypeManager(models.Manager):
12 def get_by_natural_key(self, name):
13 return self.get(name=name)
16class Model(models.Model):
17 objects = ClusterPackageTypeManager()
18 history = HistoricalRecords()
19 name = models.CharField(max_length=45)
21 def __str__(self):
22 return "%s" % self.name
24 def natural_key(self):
25 return (self.name,)
27 group = models.ForeignKey(
28 Group,
29 editable=False,
30 blank=True,
31 null=True,
32 on_delete=models.PROTECT,
33 related_name="clusterpackagetypes",
34 )
36 tags = TaggableManager(blank=True, related_name="clusterpackagetype_tags")
38 @classmethod
39 def get_natural_key_fields(cls):
40 return ["name"]
42 @classmethod
43 def get_natural_key_info(cls):
44 return [("name", None)]
46 def get_absolute_url(self):
48 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk})
50 class Meta:
51 db_table = "{}_{}".format("sm", app_label)
52 constraints = [
53 models.UniqueConstraint(
54 fields=["name", "group"], name="unique_sm_clusterpackagetype_name_group"
55 ),
56 # PostgreSQL treats NULLs as distinct, so the constraint above
57 # cannot deduplicate global (group=NULL) rows. Keep reference
58 # data globally unique with a partial constraint.
59 models.UniqueConstraint(
60 fields=["name"],
61 condition=Q(group__isnull=True),
62 name="unique_sm_clusterpackagetype_global_name",
63 ),
64 ]