|
@@ -197,7 +197,7 @@ class LocationImportForm(NestedGroupModelImportForm):
|
|
|
|
|
|
|
|
if data:
|
|
if data:
|
|
|
# Limit location queryset by assigned site
|
|
# Limit location queryset by assigned site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
|
|
self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -369,7 +369,7 @@ class RackImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit location queryset by assigned site
|
|
# Limit location queryset by assigned site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
|
|
|
|
|
|
def clean(self):
|
|
def clean(self):
|
|
@@ -432,13 +432,13 @@ class RackReservationImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit location queryset by assigned site
|
|
# Limit location queryset by assigned site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
|
|
|
|
|
|
# Limit rack queryset by assigned site and group
|
|
# Limit rack queryset by assigned site and group
|
|
|
params = {
|
|
params = {
|
|
|
- f"site__{self.fields['site'].to_field_name}": data.get('site'),
|
|
|
|
|
- f"location__{self.fields['location'].to_field_name}": data.get('location'),
|
|
|
|
|
|
|
+ **self.get_related_filter('site', 'site', data.get('site')),
|
|
|
|
|
+ **self.get_related_filter('location', 'location', data.get('location')),
|
|
|
}
|
|
}
|
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
|
|
|
|
|
@@ -691,7 +691,7 @@ class BaseDeviceImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit device type queryset by manufacturer
|
|
# Limit device type queryset by manufacturer
|
|
|
- params = {f"manufacturer__{self.fields['manufacturer'].to_field_name}": data.get('manufacturer')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('manufacturer', 'manufacturer', data.get('manufacturer'))
|
|
|
self.fields['device_type'].queryset = self.fields['device_type'].queryset.filter(**params)
|
|
self.fields['device_type'].queryset = self.fields['device_type'].queryset.filter(**params)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -770,29 +770,25 @@ class DeviceImportForm(BaseDeviceImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit location queryset by assigned site
|
|
# Limit location queryset by assigned site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
|
self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
|
|
self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
|
|
|
|
|
|
|
|
# Limit rack queryset by assigned site and location
|
|
# Limit rack queryset by assigned site and location
|
|
|
- params = {
|
|
|
|
|
- f"site__{self.fields['site'].to_field_name}": data.get('site'),
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
if location := data.get('location'):
|
|
if location := data.get('location'):
|
|
|
- params.update({
|
|
|
|
|
- f"location__{self.fields['location'].to_field_name}": location,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ params.update(self.get_related_filter('location', 'location', location))
|
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
|
|
|
|
|
|
# Limit platform queryset by manufacturer
|
|
# Limit platform queryset by manufacturer
|
|
|
- params = {f"manufacturer__{self.fields['manufacturer'].to_field_name}": data.get('manufacturer')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('manufacturer', 'manufacturer', data.get('manufacturer'))
|
|
|
self.fields['platform'].queryset = self.fields['platform'].queryset.filter(
|
|
self.fields['platform'].queryset = self.fields['platform'].queryset.filter(
|
|
|
Q(**params) | Q(manufacturer=None)
|
|
Q(**params) | Q(manufacturer=None)
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
# Limit device bay queryset by parent device
|
|
# Limit device bay queryset by parent device
|
|
|
if parent := data.get('parent'):
|
|
if parent := data.get('parent'):
|
|
|
- params = {f"device__{self.fields['parent'].to_field_name}": parent}
|
|
|
|
|
|
|
+ params = self.get_related_filter('device', 'parent', parent)
|
|
|
self.fields['device_bay'].queryset = self.fields['device_bay'].queryset.filter(**params)
|
|
self.fields['device_bay'].queryset = self.fields['device_bay'].queryset.filter(**params)
|
|
|
|
|
|
|
|
def clean(self):
|
|
def clean(self):
|
|
@@ -855,7 +851,7 @@ class ModuleImportForm(ModuleCommonForm, PrimaryModelImportForm):
|
|
|
|
|
|
|
|
if data:
|
|
if data:
|
|
|
# Limit module_bay queryset by assigned device
|
|
# Limit module_bay queryset by assigned device
|
|
|
- params = {f"device__{self.fields['device'].to_field_name}": data.get('device')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('device', 'device', data.get('device'))
|
|
|
self.fields['module_bay'].queryset = self.fields['module_bay'].queryset.filter(**params)
|
|
self.fields['module_bay'].queryset = self.fields['module_bay'].queryset.filter(**params)
|
|
|
|
|
|
|
|
def clean_replicate_components(self):
|
|
def clean_replicate_components(self):
|
|
@@ -1262,9 +1258,7 @@ class InterfaceImportForm(OwnerCSVMixin, NetBoxModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
# Limit choices for parent, bridge, and LAG interfaces to the assigned device
|
|
# Limit choices for parent, bridge, and LAG interfaces to the assigned device
|
|
|
if device := data.get('device'):
|
|
if device := data.get('device'):
|
|
|
- params = {
|
|
|
|
|
- f"device__{self.fields['device'].to_field_name}": device
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ params = self.get_related_filter('device', 'device', device)
|
|
|
self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
|
|
self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
|
|
|
self.fields['bridge'].queryset = self.fields['bridge'].queryset.filter(**params)
|
|
self.fields['bridge'].queryset = self.fields['bridge'].queryset.filter(**params)
|
|
|
self.fields['lag'].queryset = self.fields['lag'].queryset.filter(**params)
|
|
self.fields['lag'].queryset = self.fields['lag'].queryset.filter(**params)
|
|
@@ -1272,7 +1266,7 @@ class InterfaceImportForm(OwnerCSVMixin, NetBoxModelImportForm):
|
|
|
|
|
|
|
|
# Limit choices for VLANs to the assigned VLAN group
|
|
# Limit choices for VLANs to the assigned VLAN group
|
|
|
if vlan_group := data.get('vlan_group'):
|
|
if vlan_group := data.get('vlan_group'):
|
|
|
- params = {f"group__{self.fields['vlan_group'].to_field_name}": vlan_group}
|
|
|
|
|
|
|
+ params = self.get_related_filter('group', 'vlan_group', vlan_group)
|
|
|
self.fields['untagged_vlan'].queryset = self.fields['untagged_vlan'].queryset.filter(**params)
|
|
self.fields['untagged_vlan'].queryset = self.fields['untagged_vlan'].queryset.filter(**params)
|
|
|
self.fields['tagged_vlans'].queryset = self.fields['tagged_vlans'].queryset.filter(**params)
|
|
self.fields['tagged_vlans'].queryset = self.fields['tagged_vlans'].queryset.filter(**params)
|
|
|
self.fields['qinq_svlan'].queryset = self.fields['qinq_svlan'].queryset.filter(**params)
|
|
self.fields['qinq_svlan'].queryset = self.fields['qinq_svlan'].queryset.filter(**params)
|
|
@@ -1656,13 +1650,13 @@ class MACAddressImportForm(PrimaryModelImportForm):
|
|
|
# Limit interface queryset by assigned device
|
|
# Limit interface queryset by assigned device
|
|
|
if data.get('device'):
|
|
if data.get('device'):
|
|
|
self.fields['interface'].queryset = Interface.objects.filter(
|
|
self.fields['interface'].queryset = Interface.objects.filter(
|
|
|
- **{f"device__{self.fields['device'].to_field_name}": data['device']}
|
|
|
|
|
|
|
+ **self.get_related_filter('device', 'device', data['device'])
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
# Limit interface queryset by assigned device
|
|
# Limit interface queryset by assigned device
|
|
|
elif data.get('virtual_machine'):
|
|
elif data.get('virtual_machine'):
|
|
|
self.fields['interface'].queryset = VMInterface.objects.filter(
|
|
self.fields['interface'].queryset = VMInterface.objects.filter(
|
|
|
- **{f"virtual_machine__{self.fields['virtual_machine'].to_field_name}": data['virtual_machine']}
|
|
|
|
|
|
|
+ **self.get_related_filter('virtual_machine', 'virtual_machine', data['virtual_machine'])
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
def clean(self):
|
|
def clean(self):
|
|
@@ -1875,7 +1869,7 @@ class CableImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
# Limit choices for side_a_device to the assigned side_a_site
|
|
# Limit choices for side_a_device to the assigned side_a_site
|
|
|
if side_a_site := data.get('side_a_site'):
|
|
if side_a_site := data.get('side_a_site'):
|
|
|
- side_a_parent_params = {f'site__{self.fields['side_a_site'].to_field_name}': side_a_site}
|
|
|
|
|
|
|
+ side_a_parent_params = self.get_related_filter('site', 'side_a_site', side_a_site)
|
|
|
self.fields['side_a_device'].queryset = self.fields['side_a_device'].queryset.filter(
|
|
self.fields['side_a_device'].queryset = self.fields['side_a_device'].queryset.filter(
|
|
|
**side_a_parent_params
|
|
**side_a_parent_params
|
|
|
)
|
|
)
|
|
@@ -1885,7 +1879,7 @@ class CableImportForm(PrimaryModelImportForm):
|
|
|
|
|
|
|
|
# Limit choices for side_b_device to the assigned side_b_site
|
|
# Limit choices for side_b_device to the assigned side_b_site
|
|
|
if side_b_site := data.get('side_b_site'):
|
|
if side_b_site := data.get('side_b_site'):
|
|
|
- side_b_parent_params = {f'site__{self.fields['side_b_site'].to_field_name}': side_b_site}
|
|
|
|
|
|
|
+ side_b_parent_params = self.get_related_filter('site', 'side_b_site', side_b_site)
|
|
|
self.fields['side_b_device'].queryset = self.fields['side_b_device'].queryset.filter(
|
|
self.fields['side_b_device'].queryset = self.fields['side_b_device'].queryset.filter(
|
|
|
**side_b_parent_params
|
|
**side_b_parent_params
|
|
|
)
|
|
)
|
|
@@ -1958,12 +1952,11 @@ class CableImportForm(PrimaryModelImportForm):
|
|
|
# The parent field has already raised its own validation error
|
|
# The parent field has already raised its own validation error
|
|
|
return None
|
|
return None
|
|
|
field = self.fields[field_name]
|
|
field = self.fields[field_name]
|
|
|
- to_field_name = field.to_field_name or 'pk'
|
|
|
|
|
|
|
|
|
|
parents = []
|
|
parents = []
|
|
|
for value in self._split_side_values(self.data.get(field_name)):
|
|
for value in self._split_side_values(self.data.get(field_name)):
|
|
|
try:
|
|
try:
|
|
|
- parents.append(field.queryset.get(**{to_field_name: value}))
|
|
|
|
|
|
|
+ parents.append(field.filter_by_value(value).get())
|
|
|
except ObjectDoesNotExist:
|
|
except ObjectDoesNotExist:
|
|
|
self.add_error(field_name, _("Object not found: {value}").format(value=value))
|
|
self.add_error(field_name, _("Object not found: {value}").format(value=value))
|
|
|
return None
|
|
return None
|
|
@@ -2199,7 +2192,7 @@ class PowerPanelImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit group queryset by assigned site
|
|
# Limit group queryset by assigned site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -2270,17 +2263,17 @@ class PowerFeedImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit power_panel queryset by site
|
|
# Limit power_panel queryset by site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['power_panel'].queryset = self.fields['power_panel'].queryset.filter(**params)
|
|
self.fields['power_panel'].queryset = self.fields['power_panel'].queryset.filter(**params)
|
|
|
|
|
|
|
|
# Limit location queryset by site
|
|
# Limit location queryset by site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
|
|
|
|
|
|
# Limit rack queryset by site and group
|
|
# Limit rack queryset by site and group
|
|
|
params = {
|
|
params = {
|
|
|
- f"site__{self.fields['site'].to_field_name}": data.get('site'),
|
|
|
|
|
- f"location__{self.fields['location'].to_field_name}": data.get('location'),
|
|
|
|
|
|
|
+ **self.get_related_filter('site', 'site', data.get('site')),
|
|
|
|
|
+ **self.get_related_filter('location', 'location', data.get('location')),
|
|
|
}
|
|
}
|
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
|
|
|
|
|
@@ -2328,7 +2321,7 @@ class CoolingSourceImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit location queryset by assigned site
|
|
# Limit location queryset by assigned site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -2391,17 +2384,17 @@ class CoolingFeedImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit cooling_source queryset by site
|
|
# Limit cooling_source queryset by site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['cooling_source'].queryset = self.fields['cooling_source'].queryset.filter(**params)
|
|
self.fields['cooling_source'].queryset = self.fields['cooling_source'].queryset.filter(**params)
|
|
|
|
|
|
|
|
# Limit location queryset by site
|
|
# Limit location queryset by site
|
|
|
- params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('site', 'site', data.get('site'))
|
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
|
|
|
|
|
|
|
# Limit rack queryset by site and group
|
|
# Limit rack queryset by site and group
|
|
|
params = {
|
|
params = {
|
|
|
- f"site__{self.fields['site'].to_field_name}": data.get('site'),
|
|
|
|
|
- f"location__{self.fields['location'].to_field_name}": data.get('location'),
|
|
|
|
|
|
|
+ **self.get_related_filter('site', 'site', data.get('site')),
|
|
|
|
|
+ **self.get_related_filter('location', 'location', data.get('location')),
|
|
|
}
|
|
}
|
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
|
|
|
|
|
|
|
@@ -2451,6 +2444,6 @@ class VirtualDeviceContextImportForm(PrimaryModelImportForm):
|
|
|
if data:
|
|
if data:
|
|
|
|
|
|
|
|
# Limit primary_ip4/ip6 querysets by assigned device
|
|
# Limit primary_ip4/ip6 querysets by assigned device
|
|
|
- params = {f"interface__device__{self.fields['device'].to_field_name}": data.get('device')}
|
|
|
|
|
|
|
+ params = self.get_related_filter('interface__device', 'device', data.get('device'))
|
|
|
self.fields['primary_ip4'].queryset = self.fields['primary_ip4'].queryset.filter(**params)
|
|
self.fields['primary_ip4'].queryset = self.fields['primary_ip4'].queryset.filter(**params)
|
|
|
self.fields['primary_ip6'].queryset = self.fields['primary_ip6'].queryset.filter(**params)
|
|
self.fields['primary_ip6'].queryset = self.fields['primary_ip6'].queryset.filter(**params)
|