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

Fixes #22227: Limit NAT (outside) list to 10 with link to filtered view (#22230)

Martin Hauser 2 дней назад
Родитель
Сommit
288ba749e8

+ 6 - 0
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,

+ 9 - 0
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()

+ 16 - 1
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 %}<br/>{% empty %}<span class="text-muted">&mdash;</span>{% endfor %}
+{% with ips=value.all|slice:":11" %}
+  {% if ips %}
+    <ul class="list-unstyled mb-0">
+      {% for ip in ips|slice:":10" %}
+        <li>{{ ip|linkify }}{% if ip.assigned_object %} ({{ ip.assigned_object.parent_object|linkify }}){% endif %}</li>
+      {% endfor %}
+      {% if ips|length > 10 %}
+        <li>
+          <a href="{% url 'ipam:ipaddress_list' %}?nat_inside_id={{ object.pk }}" class="text-muted">…</a>
+        </li>
+      {% endif %}
+    </ul>
+  {% else %}
+    <span class="text-muted">&mdash;</span>
+  {% endif %}
+{% endwith %}