Coverage for location / models.py: 94%

32 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-24 12:43 +0000

1from django.db import models 

2from django_countries.fields import CountryField 

3from django.urls import reverse 

4from simple_history.models import HistoricalRecords 

5from django.contrib.auth.models import Group 

6 

7from . import app_label 

8 

9 

10class LocationManager(models.Manager): 

11 def get_by_natural_key(self, name, country): 

12 return self.get(name=name, country=country) 

13 

14 

15class Model(models.Model): 

16 objects = LocationManager() 

17 history = HistoricalRecords() 

18 name = models.CharField(max_length=45) 

19 country = CountryField() 

20 

21 group = models.ForeignKey( 

22 Group, 

23 editable=False, 

24 blank=True, 

25 null=True, 

26 on_delete=models.PROTECT, 

27 related_name="locations", 

28 ) 

29 

30 def __str__(self): 

31 if self.country: 

32 return "{} / {}".format(self.name, self.country) 

33 else: 

34 return "%s" % (self.name) 

35 

36 def natural_key(self): 

37 return (self.name, str(self.country)) 

38 

39 @classmethod 

40 def get_natural_key_fields(cls): 

41 return ["name", "country"] 

42 

43 @classmethod 

44 def get_natural_key_info(cls): 

45 return [("name", None), ("country", None)] 

46 

47 def get_absolute_url(self): 

48 

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", "country", "group"], 

56 name="unique_sm_location_name_country_group", 

57 ) 

58 ]