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
« 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 _
5from netbox.models import AdminModel
6from utilities.querysets import RestrictedQuerySet
8__all__ = (
9 'Owner',
10 'OwnerGroup',
11)
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 )
24 class Meta:
25 ordering = ['name']
26 verbose_name = _('owner group')
27 verbose_name_plural = _('owner groups')
29 def __str__(self):
30 return self.name
32 def get_absolute_url(self):
33 return reverse('users:ownergroup', args=[self.pk])
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 )
65 objects = RestrictedQuerySet.as_manager()
66 clone_fields = ('user_groups', 'users')
68 class Meta:
69 ordering = ('name',)
70 verbose_name = _('owner')
71 verbose_name_plural = _('owners')
73 def __str__(self):
74 return self.name
76 def get_absolute_url(self):
77 return reverse('users:owner', args=[self.pk])