Skip to content

Commit cc68f42

Browse files
committed
fix: wire YAML export POST to NetBox bulk-select form convention
- post() now reads request.POST.getlist('pk') (NetBox convention) - template overrides bulk_buttons block with Export Selected YAML button using formaction to piggyback on the existing bulk-select form - update test to post {pk: [pk]} matching the new convention
1 parent b734f67 commit cc68f42

3 files changed

Lines changed: 19 additions & 4 deletions

File tree

netbox_interface_name_rules/templates/netbox_interface_name_rules/interfacenamerule_list.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,13 @@ <h6 class="mt-3">Examples</h6>
153153
<i class="mdi mdi-download"></i> Export YAML
154154
</a>
155155
{% endblock %}
156+
157+
{% block bulk_buttons %}
158+
{{ block.super }}
159+
<button type="submit"
160+
formaction="{% url 'plugins:netbox_interface_name_rules:interfacenamerule_export_yaml' %}"
161+
class="btn btn-outline-secondary btn-sm"
162+
title="Export selected rules as YAML">
163+
<i class="mdi mdi-download"></i> Export Selected YAML
164+
</button>
165+
{% endblock %}

netbox_interface_name_rules/tests/test_views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,13 +767,13 @@ def test_yaml_export_all_contains_rules(self):
767767
self.assertGreaterEqual(len(data), 1)
768768

769769
def test_yaml_export_selected_rules_via_post(self):
770-
"""POST with pk_ form fields must export only the selected rules."""
770+
"""POST with NetBox bulk-select pk inputs must export only the selected rules."""
771771
import yaml
772772

773773
self.client.force_login(self.superuser)
774774
response = self.client.post(
775775
self.YAML_URL,
776-
{f"pk_{self.rule.pk}": self.rule.pk},
776+
{"pk": [self.rule.pk]},
777777
)
778778
self.assertEqual(response.status_code, 200)
779779
data = yaml.safe_load(response.content)

netbox_interface_name_rules/views.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,13 @@ def get(self, request):
141141
return self._build_response(InterfaceNameRule.objects.all())
142142

143143
def post(self, request):
144-
"""Export selected rules (pk_<n> form fields) as YAML, or all if none selected."""
145-
pk_list = [int(v) for k, v in request.POST.items() if k.startswith("pk_") and v.isdigit()]
144+
"""Export selected rules as YAML using NetBox's bulk-select form (pk inputs).
145+
146+
The parent object_list.html wraps the table in a POST form; selected rows
147+
post their PKs as repeated ``pk`` inputs. Falls back to all rules when
148+
nothing is selected.
149+
"""
150+
pk_list = [int(v) for v in request.POST.getlist("pk") if v.isdigit()]
146151
if pk_list:
147152
queryset = InterfaceNameRule.objects.filter(pk__in=pk_list)
148153
else:

0 commit comments

Comments
 (0)