Просмотр исходного кода

13764 Add contacts to IP views

Arthur 1 год назад
Родитель
Сommit
17799df72e
2 измененных файлов с 26 добавлено и 4 удалено
  1. 5 4
      netbox/ipam/models/ip.py
  2. 21 0
      netbox/ipam/views.py

+ 5 - 4
netbox/ipam/models/ip.py

@@ -18,6 +18,7 @@ from ipam.querysets import PrefixQuerySet
 from ipam.validators import DNSValidator
 from ipam.validators import DNSValidator
 from netbox.config import get_config
 from netbox.config import get_config
 from netbox.models import OrganizationalModel, PrimaryModel
 from netbox.models import OrganizationalModel, PrimaryModel
+from netbox.models.features import ContactsMixin
 
 
 __all__ = (
 __all__ = (
     'Aggregate',
     'Aggregate',
@@ -74,7 +75,7 @@ class RIR(OrganizationalModel):
         return reverse('ipam:rir', args=[self.pk])
         return reverse('ipam:rir', args=[self.pk])
 
 
 
 
-class Aggregate(GetAvailablePrefixesMixin, PrimaryModel):
+class Aggregate(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel):
     """
     """
     An aggregate exists at the root level of the IP address space hierarchy in NetBox. Aggregates are used to organize
     An aggregate exists at the root level of the IP address space hierarchy in NetBox. Aggregates are used to organize
     the hierarchy and track the overall utilization of available address space. Each Aggregate is assigned to a RIR.
     the hierarchy and track the overall utilization of available address space. Each Aggregate is assigned to a RIR.
@@ -206,7 +207,7 @@ class Role(OrganizationalModel):
         return reverse('ipam:role', args=[self.pk])
         return reverse('ipam:role', args=[self.pk])
 
 
 
 
-class Prefix(GetAvailablePrefixesMixin, PrimaryModel):
+class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel):
     """
     """
     A Prefix represents an IPv4 or IPv6 network, including mask length. Prefixes can optionally be assigned to Sites and
     A Prefix represents an IPv4 or IPv6 network, including mask length. Prefixes can optionally be assigned to Sites and
     VRFs. A Prefix must be assigned a status and may optionally be assigned a used-define Role. A Prefix can also be
     VRFs. A Prefix must be assigned a status and may optionally be assigned a used-define Role. A Prefix can also be
@@ -486,7 +487,7 @@ class Prefix(GetAvailablePrefixesMixin, PrimaryModel):
         return min(utilization, 100)
         return min(utilization, 100)
 
 
 
 
-class IPRange(PrimaryModel):
+class IPRange(ContactsMixin, PrimaryModel):
     """
     """
     A range of IP addresses, defined by start and end addresses.
     A range of IP addresses, defined by start and end addresses.
     """
     """
@@ -695,7 +696,7 @@ class IPRange(PrimaryModel):
         return min(float(child_count) / self.size * 100, 100)
         return min(float(child_count) / self.size * 100, 100)
 
 
 
 
-class IPAddress(PrimaryModel):
+class IPAddress(ContactsMixin, PrimaryModel):
     """
     """
     An IPAddress represents an individual IPv4 or IPv6 address and its mask. The mask length should match what is
     An IPAddress represents an individual IPv4 or IPv6 address and its mask. The mask length should match what is
     configured in the real world. (Typically, only loopback interfaces are configured with /32 or /128 masks.) Like
     configured in the real world. (Typically, only loopback interfaces are configured with /32 or /128 masks.) Like

+ 21 - 0
netbox/ipam/views.py

@@ -9,6 +9,7 @@ from circuits.models import Provider
 from dcim.filtersets import InterfaceFilterSet
 from dcim.filtersets import InterfaceFilterSet
 from dcim.models import Interface, Site
 from dcim.models import Interface, Site
 from netbox.views import generic
 from netbox.views import generic
+from tenancy.views import ObjectContactsView
 from utilities.query import count_related
 from utilities.query import count_related
 from utilities.tables import get_table_ordering
 from utilities.tables import get_table_ordering
 from utilities.views import ViewTab, register_model_view
 from utilities.views import ViewTab, register_model_view
@@ -405,6 +406,11 @@ class AggregateBulkDeleteView(generic.BulkDeleteView):
     table = tables.AggregateTable
     table = tables.AggregateTable
 
 
 
 
+@register_model_view(Aggregate, 'contacts')
+class AggregateContactsView(ObjectContactsView):
+    queryset = Aggregate.objects.all()
+
+
 #
 #
 # Prefix/VLAN roles
 # Prefix/VLAN roles
 #
 #
@@ -643,6 +649,11 @@ class PrefixBulkDeleteView(generic.BulkDeleteView):
     table = tables.PrefixTable
     table = tables.PrefixTable
 
 
 
 
+@register_model_view(Prefix, 'contacts')
+class PrefixContactsView(ObjectContactsView):
+    queryset = Prefix.objects.all()
+
+
 #
 #
 # IP Ranges
 # IP Ranges
 #
 #
@@ -726,6 +737,11 @@ class IPRangeBulkDeleteView(generic.BulkDeleteView):
     table = tables.IPRangeTable
     table = tables.IPRangeTable
 
 
 
 
+@register_model_view(IPRange, 'contacts')
+class IPRangeContactsView(ObjectContactsView):
+    queryset = IPRange.objects.all()
+
+
 #
 #
 # IP addresses
 # IP addresses
 #
 #
@@ -893,6 +909,11 @@ class IPAddressRelatedIPsView(generic.ObjectChildrenView):
         return parent.get_related_ips().restrict(request.user, 'view')
         return parent.get_related_ips().restrict(request.user, 'view')
 
 
 
 
+@register_model_view(IPAddress, 'contacts')
+class IPAddressContactsView(ObjectContactsView):
+    queryset = IPAddress.objects.all()
+
+
 #
 #
 # VLAN groups
 # VLAN groups
 #
 #