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

This commit is contained in:
Martin Hauser 2026-05-18 18:40:51 +02:00 committed by GitHub
parent f149ccb302
commit 288ba749e8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 31 additions and 1 deletions

View File

@ -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,

View File

@ -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()

View File

@ -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 %}