Coverage for vendor / models.py: 93%

30 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 django.contrib.auth.models import Group 

5 

6from . import app_label 

7 

8 

9class VendorManager(models.Manager): 

10 def get_by_natural_key(self, name): 

11 return self.get(name=name) 

12 

13 

14class Model(models.Model): 

15 objects = VendorManager() 

16 name = models.CharField(max_length=45) 

17 is_hardware = models.BooleanField( 

18 default=True, verbose_name="(virtual) Hardware Vendor" 

19 ) 

20 is_software = models.BooleanField(default=True, verbose_name="Software Vendor") 

21 

22 group = models.ForeignKey( 

23 Group, 

24 editable=False, 

25 blank=True, 

26 null=True, 

27 on_delete=models.PROTECT, 

28 related_name="vendors", 

29 ) 

30 

31 history = HistoricalRecords() 

32 

33 def __str__(self): 

34 return "%s" % self.name 

35 

36 def natural_key(self): 

37 return (self.name,) 

38 

39 @classmethod 

40 def get_natural_key_fields(cls): 

41 return ["name"] 

42 

43 @classmethod 

44 def get_natural_key_info(cls): 

45 return [("name", None)] 

46 

47 def get_absolute_url(self): 

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_vendor_name_group" 

55 ) 

56 ]