Coverage for servermodel / models.py: 91%

33 statements  

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

1from django.db import models 

2from django.urls import reverse 

3from simple_history.models import HistoricalRecords 

4from vendor.models import Model as VendorModel 

5from django.contrib.auth.models import Group 

6 

7from . import app_label 

8 

9 

10class ServerModelManager(models.Manager): 

11 def get_by_natural_key(self, vendor, name): 

12 if isinstance(vendor, (list, tuple)): 

13 vendor = vendor[0] 

14 return self.get(vendor__name=vendor, name=name) 

15 

16 

17class Model(models.Model): 

18 objects = ServerModelManager() 

19 history = HistoricalRecords() 

20 name = models.CharField(max_length=45) 

21 vendor = models.ForeignKey( 

22 VendorModel, 

23 null=False, 

24 default=None, 

25 related_name="%s_set" % app_label, 

26 related_query_name="%s" % app_label, 

27 on_delete=models.PROTECT, 

28 ) 

29 

30 group = models.ForeignKey( 

31 Group, 

32 editable=False, 

33 blank=True, 

34 null=True, 

35 on_delete=models.PROTECT, 

36 related_name="servermodels", 

37 ) 

38 

39 def __str__(self): 

40 return "{} {}".format(self.vendor.name, self.name) 

41 

42 def natural_key(self): 

43 return self.vendor.natural_key() + (self.name,) 

44 

45 natural_key.dependencies = ["vendor.Model"] 

46 

47 @classmethod 

48 def get_natural_key_fields(cls): 

49 return ["vendor__name", "name"] 

50 

51 @classmethod 

52 def get_natural_key_info(cls): 

53 return [("vendor", VendorModel), ("name", None)] 

54 

55 def get_absolute_url(self): 

56 

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

58 

59 class Meta: 

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

61 constraints = [ 

62 models.UniqueConstraint( 

63 fields=["vendor", "name"], name="unique_sm_servermodel_vendor_name" 

64 ), 

65 models.UniqueConstraint( 

66 fields=["vendor", "name", "group"], 

67 name="unique_sm_servermodel_vendor_name_group", 

68 ), 

69 ]