Coverage for clusterpackagetype/models.py: 94%

31 statements  

« 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 

7 

8from . import app_label 

9 

10 

11class ClusterPackageTypeManager(models.Manager): 

12 def get_by_natural_key(self, name): 

13 return self.get(name=name) 

14 

15 

16class Model(models.Model): 

17 objects = ClusterPackageTypeManager() 

18 history = HistoricalRecords() 

19 name = models.CharField(max_length=45) 

20 

21 def __str__(self): 

22 return "%s" % self.name 

23 

24 def natural_key(self): 

25 return (self.name,) 

26 

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 ) 

35 

36 tags = TaggableManager(blank=True, related_name="clusterpackagetype_tags") 

37 

38 @classmethod 

39 def get_natural_key_fields(cls): 

40 return ["name"] 

41 

42 @classmethod 

43 def get_natural_key_info(cls): 

44 return [("name", None)] 

45 

46 def get_absolute_url(self): 

47 

48 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk}) 

49 

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 ]