fix(ipam): Omit None values from AddObject URL parameters
Update AddObject.get_url() to skip parameters that resolve to None, preventing invalid query strings. Adjust VLAN-to-Prefix action to use scope_type/scope instead of site field. Fixes #22031
This commit is contained in:
parent
385767c41f
commit
d01454c753
|
|
@ -1636,8 +1636,11 @@ class VLANView(generic.ObjectView):
|
||||||
actions.AddObject(
|
actions.AddObject(
|
||||||
'ipam.prefix',
|
'ipam.prefix',
|
||||||
url_params={
|
url_params={
|
||||||
'tenant': lambda ctx: ctx['object'].tenant.pk if ctx['object'].tenant else None,
|
'tenant': lambda ctx: ctx['object'].tenant_id,
|
||||||
'site': lambda ctx: ctx['object'].site.pk if ctx['object'].site else None,
|
'scope_type': lambda ctx: (
|
||||||
|
ContentType.objects.get_for_model(Site).pk if ctx['object'].site_id else None
|
||||||
|
),
|
||||||
|
'scope': lambda ctx: ctx['object'].site_id,
|
||||||
'vlan': lambda ctx: ctx['object'].pk,
|
'vlan': lambda ctx: ctx['object'].pk,
|
||||||
},
|
},
|
||||||
label=_('Add a Prefix'),
|
label=_('Add a Prefix'),
|
||||||
|
|
|
||||||
|
|
@ -92,14 +92,18 @@ class LinkAction(PanelAction):
|
||||||
"""
|
"""
|
||||||
url = reverse(self.view_name, kwargs=self.view_kwargs)
|
url = reverse(self.view_name, kwargs=self.view_kwargs)
|
||||||
if self.url_params:
|
if self.url_params:
|
||||||
# If the param value is callable, call it with the context and save the result.
|
url_params = {}
|
||||||
url_params = {
|
for key, value in self.url_params.items():
|
||||||
k: v(context) if callable(v) else v for k, v in self.url_params.items()
|
# If the param value is callable, call it with the context and save the result.
|
||||||
}
|
value = value(context) if callable(value) else value
|
||||||
|
# Omit parameters whose value resolved to None
|
||||||
|
if value is not None:
|
||||||
|
url_params[key] = value
|
||||||
# Set the return URL if not already set and an object is available.
|
# Set the return URL if not already set and an object is available.
|
||||||
if 'return_url' not in url_params and 'object' in context:
|
if 'return_url' not in url_params and 'object' in context:
|
||||||
url_params['return_url'] = context['object'].get_absolute_url()
|
url_params['return_url'] = context['object'].get_absolute_url()
|
||||||
url = f'{url}?{urlencode(url_params)}'
|
if url_params:
|
||||||
|
url = f'{url}?{urlencode(url_params)}'
|
||||||
return url
|
return url
|
||||||
|
|
||||||
def get_context(self, context):
|
def get_context(self, context):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue