mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Adapt component creation forms to infer parent device/VM from initial or bound data
This commit is contained in:
@ -2456,8 +2456,9 @@ class PowerOutletCreateForm(ComponentForm):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
# Limit power_port queryset to PowerPorts which belong to the parent Device
|
# Limit power_port queryset to PowerPorts which belong to the parent Device
|
||||||
if 'device' in self.initial:
|
device = Device.objects.get(
|
||||||
device = Device.objects.filter(pk=self.initial['device']).first()
|
pk=self.initial.get('device') or self.data.get('device')
|
||||||
|
)
|
||||||
self.fields['power_port'].queryset = PowerPort.objects.filter(device=device)
|
self.fields['power_port'].queryset = PowerPort.objects.filter(device=device)
|
||||||
|
|
||||||
|
|
||||||
@ -2707,8 +2708,9 @@ class InterfaceCreateForm(InterfaceCommonForm, ComponentForm, forms.Form):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
# Limit LAG choices to interfaces which belong to the parent device (or VC master)
|
# Limit LAG choices to interfaces which belong to the parent device (or VC master)
|
||||||
if 'device' in self.initial:
|
device = Device.objects.get(
|
||||||
device = Device.objects.filter(pk=self.initial['device']).first()
|
pk=self.initial.get('device') or self.data.get('device')
|
||||||
|
)
|
||||||
self.fields['lag'].queryset = Interface.objects.filter(
|
self.fields['lag'].queryset = Interface.objects.filter(
|
||||||
device__in=[device, device.get_vc_master()],
|
device__in=[device, device.get_vc_master()],
|
||||||
type=InterfaceTypeChoices.TYPE_LAG
|
type=InterfaceTypeChoices.TYPE_LAG
|
||||||
@ -2952,18 +2954,20 @@ class FrontPortCreateForm(ComponentForm):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
parent = Device.objects.get(pk=self.initial.get('device'))
|
device = Device.objects.get(
|
||||||
|
pk=self.initial.get('device') or self.data.get('device')
|
||||||
|
)
|
||||||
|
|
||||||
# Determine which rear port positions are occupied. These will be excluded from the list of available
|
# Determine which rear port positions are occupied. These will be excluded from the list of available
|
||||||
# mappings.
|
# mappings.
|
||||||
occupied_port_positions = [
|
occupied_port_positions = [
|
||||||
(front_port.rear_port_id, front_port.rear_port_position)
|
(front_port.rear_port_id, front_port.rear_port_position)
|
||||||
for front_port in parent.frontports.all()
|
for front_port in device.frontports.all()
|
||||||
]
|
]
|
||||||
|
|
||||||
# Populate rear port choices
|
# Populate rear port choices
|
||||||
choices = []
|
choices = []
|
||||||
rear_ports = RearPort.objects.filter(device=parent)
|
rear_ports = RearPort.objects.filter(device=device)
|
||||||
for rear_port in rear_ports:
|
for rear_port in rear_ports:
|
||||||
for i in range(1, rear_port.positions + 1):
|
for i in range(1, rear_port.positions + 1):
|
||||||
if (rear_port.pk, i) not in occupied_port_positions:
|
if (rear_port.pk, i) not in occupied_port_positions:
|
||||||
|
@ -797,9 +797,12 @@ class InterfaceCreateForm(ComponentForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
virtual_machine = VirtualMachine.objects.get(
|
||||||
|
pk=self.initial.get('virtual_machine') or self.data.get('virtual_machine')
|
||||||
|
)
|
||||||
|
|
||||||
# Limit VLAN choices to those in: global vlans, global groups, the current site's group, the current site
|
# Limit VLAN choices to those in: global vlans, global groups, the current site's group, the current site
|
||||||
vlan_choices = []
|
vlan_choices = []
|
||||||
global_vlans = VLAN.objects.filter(site=None, group=None)
|
global_vlans = VLAN.objects.filter(site=None, group=None)
|
||||||
@ -812,8 +815,7 @@ class InterfaceCreateForm(ComponentForm):
|
|||||||
(group.name, [(vlan.pk, vlan) for vlan in global_group_vlans])
|
(group.name, [(vlan.pk, vlan) for vlan in global_group_vlans])
|
||||||
)
|
)
|
||||||
|
|
||||||
parent = VirtualMachine.objects.get(pk=self.initial.get('virtual_machine'))
|
site = getattr(virtual_machine.cluster, 'site', None)
|
||||||
site = getattr(parent.cluster, 'site', None)
|
|
||||||
if site is not None:
|
if site is not None:
|
||||||
|
|
||||||
# Add non-grouped site VLANs
|
# Add non-grouped site VLANs
|
||||||
|
Reference in New Issue
Block a user