Coverage for users/models/owners.py: 94%

31 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 18:35 +0000

1from django.db import models 

2from django.urls import reverse 

3from django.utils.translation import gettext_lazy as _ 

4 

5from netbox.models import AdminModel 

6from utilities.querysets import RestrictedQuerySet 

7 

8__all__ = ( 

9 'Owner', 

10 'OwnerGroup', 

11) 

12 

13 

14class OwnerGroup(AdminModel): 

15 """ 

16 An arbitrary grouping of Owners. 

17 """ 

18 name = models.CharField( 

19 verbose_name=_('name'), 

20 max_length=100, 

21 unique=True, 

22 ) 

23 

24 class Meta: 

25 ordering = ['name'] 

26 verbose_name = _('owner group') 

27 verbose_name_plural = _('owner groups') 

28 

29 def __str__(self): 

30 return self.name 

31 

32 def get_absolute_url(self): 

33 return reverse('users:ownergroup', args=[self.pk]) 

34 

35 

36class Owner(AdminModel): 

37 name = models.CharField( 

38 verbose_name=_('name'), 

39 max_length=100, 

40 unique=True, 

41 ) 

42 group = models.ForeignKey( 

43 to='users.OwnerGroup', 

44 on_delete=models.PROTECT, 

45 related_name='members', 

46 verbose_name=_('group'), 

47 blank=True, 

48 null=True, 

49 ) 

50 user_groups = models.ManyToManyField( 

51 to='users.Group', 

52 verbose_name=_('groups'), 

53 blank=True, 

54 related_name='owners', 

55 related_query_name='owner', 

56 ) 

57 users = models.ManyToManyField( 

58 to='users.User', 

59 verbose_name=_('users'), 

60 blank=True, 

61 related_name='owners', 

62 related_query_name='owner', 

63 ) 

64 

65 objects = RestrictedQuerySet.as_manager() 

66 clone_fields = ('user_groups', 'users') 

67 

68 class Meta: 

69 ordering = ('name',) 

70 verbose_name = _('owner') 

71 verbose_name_plural = _('owners') 

72 

73 def __str__(self): 

74 return self.name 

75 

76 def get_absolute_url(self): 

77 return reverse('users:owner', args=[self.pk])