Coverage for domain/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 ModelManager(models.Manager): 

12 def get_by_natural_key(self, name): 

13 return self.get(name=name) 

14 

15 

16class Model(models.Model): 

17 

18 name = models.CharField(max_length=45, verbose_name="Domain name") 

19 

20 group = models.ForeignKey( 

21 Group, 

22 editable=False, 

23 blank=True, 

24 null=True, 

25 on_delete=models.PROTECT, 

26 related_name="domains", 

27 ) 

28 

29 tags = TaggableManager(blank=True, related_name="domain_tags") 

30 

31 objects = ModelManager() 

32 history = HistoricalRecords() 

33 

34 def natural_key(self): 

35 return (self.name,) 

36 

37 @classmethod 

38 def get_natural_key_fields(cls): 

39 return ["name"] 

40 

41 @classmethod 

42 def get_natural_key_info(cls): 

43 return [("name", None)] 

44 

45 def __str__(self): 

46 return "%s" % self.name 

47 

48 def get_absolute_url(self): 

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

50 

51 class Meta: 

52 db_table = "{}_{}".format("sm", app_label) 

53 constraints = [ 

54 models.UniqueConstraint( 

55 fields=["name", "group"], name="unique_sm_domain_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_domain_global_name", 

64 ), 

65 ]