diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py index 9433f3cb3..0bd60ef4f 100644 --- a/netbox/ipam/forms/filtersets.py +++ b/netbox/ipam/forms/filtersets.py @@ -352,6 +352,7 @@ class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryMode ), FieldSet('vrf_id', 'present_in_vrf_id', name=_('VRF')), FieldSet('device_id', 'virtual_machine_id', name=_('Device/VM')), + FieldSet('nat_inside_id', name=_('NAT')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), FieldSet('owner_group_id', 'owner_id', name=_('Ownership')), FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), @@ -397,6 +398,11 @@ class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryMode required=False, label=_('Assigned VM'), ) + nat_inside_id = DynamicModelMultipleChoiceField( + queryset=IPAddress.objects.all(), + required=False, + label=_('NAT inside'), + ) status = forms.MultipleChoiceField( label=_('Status'), choices=IPAddressStatusChoices, diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index fdbb0767f..900436d62 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -1307,6 +1307,10 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests): ) IPAddress.objects.bulk_create(ipaddresses) + IPAddress.objects.filter(pk__in=[ipaddresses[1].pk, ipaddresses[2].pk]).update( + nat_inside=ipaddresses[0] + ) + services = ( Service( parent=devices[0], @@ -1476,6 +1480,11 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'service_id': [services[0].pk, services[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_nat_inside(self): + inside = IPAddress.objects.filter(nat_outside__isnull=False).distinct().first() + params = {'nat_inside_id': [inside.pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class FHRPGroupTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = FHRPGroup.objects.all() diff --git a/netbox/templates/ipam/ipaddress/attrs/nat_outside.html b/netbox/templates/ipam/ipaddress/attrs/nat_outside.html index 73dd72035..558e4a6c0 100644 --- a/netbox/templates/ipam/ipaddress/attrs/nat_outside.html +++ b/netbox/templates/ipam/ipaddress/attrs/nat_outside.html @@ -1,2 +1,17 @@ {% load helpers %} -{% for ip in value.all %}{{ ip|linkify }}{% if ip.assigned_object %} ({{ ip.assigned_object.parent_object|linkify }}){% endif %}
{% empty %}{% endfor %} +{% with ips=value.all|slice:":11" %} + {% if ips %} + + {% else %} + + {% endif %} +{% endwith %}