Coverage for patchtime/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 ModelManager(models.Manager):
12 def get_by_natural_key(self, name):
13 return self.get(name=name)
16class Model(models.Model):
18 name = models.CharField(max_length=45)
20 group = models.ForeignKey(
21 Group,
22 editable=False,
23 blank=True,
24 null=True,
25 on_delete=models.PROTECT,
26 related_name="patchtimes",
27 )
29 tags = TaggableManager(blank=True, related_name="patchtime_tags")
31 objects = ModelManager()
32 history = HistoricalRecords()
34 def natural_key(self):
35 return (self.name,)
37 @classmethod
38 def get_natural_key_fields(cls):
39 return ["name"]
41 @classmethod
42 def get_natural_key_info(cls):
43 return [("name", None)]
45 def __str__(self):
46 return "%s" % self.name
48 def get_absolute_url(self):
49 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk})
51 class Meta:
52 db_table = "{}_{}".format("sm", app_label)
53 constraints = [
54 models.UniqueConstraint(
55 fields=["name", "group"], name="unique_sm_patchtime_name_group"
56 ),
57 # PostgreSQL treats NULLs as distinct, so the constraint above
58 # cannot deduplicate global (group=NULL) rows. Keep reference
59 # data globally unique with a partial constraint.
60 models.UniqueConstraint(
61 fields=["name"],
62 condition=Q(group__isnull=True),
63 name="unique_sm_patchtime_global_name",
64 ),
65 ]