From a3322d9cc26a355090dea312a5a839ec0f398764 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Wed, 6 Aug 2025 20:48:32 -0500 Subject: [PATCH 1/2] Fixes: #19996 - Correct dynamic query parameters for IP Address field in Add/Edit Service form --- netbox/ipam/forms/model_forms.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index 83bb42a4f37..c5e6739ed80 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -21,7 +21,7 @@ from utilities.forms.utils import get_field_value from utilities.forms.widgets import DatePicker, HTMXSelect from utilities.templatetags.builtins.filters import bettertitle -from virtualization.models import VMInterface +from virtualization.models import VMInterface, VirtualMachine __all__ = ( 'AggregateForm', @@ -783,10 +783,6 @@ class ServiceForm(NetBoxModelForm): queryset=IPAddress.objects.all(), required=False, label=_('IP Addresses'), - query_params={ - 'device_id': '$device', - 'virtual_machine_id': '$virtual_machine', - } ) comments = CommentField() @@ -818,13 +814,28 @@ def __init__(self, *args, **kwargs): if (parent_object_type_id := get_field_value(self, 'parent_object_type')): try: parent_type = ContentType.objects.get(pk=parent_object_type_id) + if parent_type.model_class() == Device: + self.fields['ipaddresses'].widget.add_query_params({ + 'device_id': '$parent', + }) + elif parent_type.model_class() == VirtualMachine: + self.fields['ipaddresses'].widget.add_query_params({ + 'virtual_machine_id': '$parent', + }) + elif parent_type.model_class() == FHRPGroup: + self.fields['ipaddresses'].widget.add_query_params({ + 'fhrpgroup_id': '$parent', + }) model = parent_type.model_class() self.fields['parent'].queryset = model.objects.all() self.fields['parent'].widget.attrs['selector'] = model._meta.label_lower self.fields['parent'].disabled = False self.fields['parent'].label = _(bettertitle(model._meta.verbose_name)) except ObjectDoesNotExist: + print('Except') pass + else: + print('No obj_type') if self.instance and self.instance.pk and parent_object_type_id != self.instance.parent_object_type_id: self.initial['parent'] = None From 6a42d7c69d449bf0793a9928d4e2f4680b9d4820 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Thu, 7 Aug 2025 21:24:08 -0500 Subject: [PATCH 2/2] Remove debug and do some cleanup --- netbox/ipam/forms/model_forms.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index c5e6739ed80..fffe21425bb 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -811,31 +811,28 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if (parent_object_type_id := get_field_value(self, 'parent_object_type')): + if parent_object_type_id := get_field_value(self, 'parent_object_type'): try: parent_type = ContentType.objects.get(pk=parent_object_type_id) - if parent_type.model_class() == Device: + model = parent_type.model_class() + if model == Device: self.fields['ipaddresses'].widget.add_query_params({ 'device_id': '$parent', }) - elif parent_type.model_class() == VirtualMachine: + elif model == VirtualMachine: self.fields['ipaddresses'].widget.add_query_params({ 'virtual_machine_id': '$parent', }) - elif parent_type.model_class() == FHRPGroup: + elif model == FHRPGroup: self.fields['ipaddresses'].widget.add_query_params({ 'fhrpgroup_id': '$parent', }) - model = parent_type.model_class() self.fields['parent'].queryset = model.objects.all() self.fields['parent'].widget.attrs['selector'] = model._meta.label_lower self.fields['parent'].disabled = False self.fields['parent'].label = _(bettertitle(model._meta.verbose_name)) except ObjectDoesNotExist: - print('Except') pass - else: - print('No obj_type') if self.instance and self.instance.pk and parent_object_type_id != self.instance.parent_object_type_id: self.initial['parent'] = None