Jeremy Stretch 4 лет назад
Родитель
Сommit
d33d9522cc
2 измененных файлов с 15 добавлено и 9 удалено
  1. 9 3
      netbox/ipam/querysets.py
  2. 6 6
      netbox/virtualization/forms.py

+ 9 - 3
netbox/ipam/querysets.py

@@ -60,6 +60,7 @@ class VLANQuerySet(RestrictedQuerySet):
                 scope_id=device.rack_id
             )
 
+        # Return all applicable VLANs
         return self.filter(
             Q(group__in=VLANGroup.objects.filter(q)) |
             Q(site=device.site) |
@@ -98,9 +99,14 @@ class VLANQuerySet(RestrictedQuerySet):
             scope_type=ContentType.objects.get_by_natural_key('virtualization', 'cluster'),
             scope_id=vm.cluster_id
         )
+        vlan_groups = VLANGroup.objects.filter(q)
 
-        return self.filter(
-            Q(group__in=VLANGroup.objects.filter(q)) |
-            Q(site=vm.cluster.site) |
+        # Return all applicable VLANs
+        q = (
+            Q(group__in=vlan_groups) |
             Q(group__isnull=True, site__isnull=True)  # Global VLANs
         )
+        if vm.cluster.site:
+            q |= Q(site=vm.cluster.site)
+
+        return self.filter(q)

+ 6 - 6
netbox/virtualization/forms.py

@@ -640,8 +640,8 @@ class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm)
 
         # Limit VLAN choices by virtual machine
         vm_id = self.initial.get('virtual_machine') or self.data.get('virtual_machine')
-        self.fields['untagged_vlan'].widget.add_query_param('available_on_vm', vm_id)
-        self.fields['tagged_vlans'].widget.add_query_param('available_on_vm', vm_id)
+        self.fields['untagged_vlan'].widget.add_query_param('available_on_virtualmachine', vm_id)
+        self.fields['tagged_vlans'].widget.add_query_param('available_on_virtualmachine', vm_id)
 
 
 class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm):
@@ -692,8 +692,8 @@ class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm):
 
         # Limit VLAN choices by virtual machine
         vm_id = self.initial.get('virtual_machine') or self.data.get('virtual_machine')
-        self.fields['untagged_vlan'].widget.add_query_param('available_on_vm', vm_id)
-        self.fields['tagged_vlans'].widget.add_query_param('available_on_vm', vm_id)
+        self.fields['untagged_vlan'].widget.add_query_param('available_on_virtualmachine', vm_id)
+        self.fields['tagged_vlans'].widget.add_query_param('available_on_virtualmachine', vm_id)
 
 
 class VMInterfaceCSVForm(CSVModelForm):
@@ -768,8 +768,8 @@ class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
 
         # Limit VLAN choices by virtual machine
         vm_id = self.initial.get('virtual_machine') or self.data.get('virtual_machine')
-        self.fields['untagged_vlan'].widget.add_query_param('available_on_vm', vm_id)
-        self.fields['tagged_vlans'].widget.add_query_param('available_on_vm', vm_id)
+        self.fields['untagged_vlan'].widget.add_query_param('available_on_virtualmachine', vm_id)
+        self.fields['tagged_vlans'].widget.add_query_param('available_on_virtualmachine', vm_id)
 
 
 class VMInterfaceBulkRenameForm(BulkRenameForm):