diff --git a/netbox/circuits/forms/model_forms.py b/netbox/circuits/forms/model_forms.py index d06f0bd9d..537db50df 100644 --- a/netbox/circuits/forms/model_forms.py +++ b/netbox/circuits/forms/model_forms.py @@ -1,7 +1,7 @@ from django.utils.translation import gettext as _ from circuits.models import * -from dcim.models import Region, Site, SiteGroup +from dcim.models import Site from ipam.models import ASN from netbox.forms import NetBoxModelForm from tenancy.forms import TenancyForm @@ -114,50 +114,22 @@ class CircuitTerminationForm(NetBoxModelForm): 'provider_id': '$provider', }, ) - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - }, - required=False - ) - provider_network_provider = DynamicModelChoiceField( - queryset=Provider.objects.all(), required=False, - label='Provider', - initial_params={ - 'networks': 'provider_network' - } + selector=True ) provider_network = DynamicModelChoiceField( queryset=ProviderNetwork.objects.all(), - query_params={ - 'provider_id': '$provider_network_provider', - }, - required=False + required=False, + selector=True ) class Meta: model = CircuitTermination fields = [ - 'provider', 'circuit', 'term_side', 'region', 'site_group', 'site', 'provider_network_provider', - 'provider_network', 'mark_connected', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', - 'description', 'tags', + 'provider', 'circuit', 'term_side', 'site', 'provider_network', 'mark_connected', 'port_speed', + 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'tags', ] widgets = { 'port_speed': SelectSpeedWidget(), diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index 38c4c2cfd..3312d69a8 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -16,7 +16,7 @@ from utilities.forms import ( DynamicModelChoiceField, DynamicModelMultipleChoiceField, JSONField, NumericArrayField, SelectWithPK, SlugField, SelectSpeedWidget ) -from virtualization.models import Cluster, ClusterGroup +from virtualization.models import Cluster from wireless.models import WirelessLAN, WirelessLANGroup from .common import InterfaceCommonForm, ModuleCommonForm @@ -157,26 +157,9 @@ class SiteForm(TenancyForm, NetBoxModelForm): class LocationForm(TenancyForm, NetBoxModelForm): - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } + selector=True ) parent = DynamicModelChoiceField( queryset=Location.objects.all(), @@ -188,17 +171,14 @@ class LocationForm(TenancyForm, NetBoxModelForm): slug = SlugField() fieldsets = ( - ('Location', ( - 'region', 'site_group', 'site', 'parent', 'name', 'slug', 'status', 'description', 'tags', - )), + ('Location', ('site', 'parent', 'name', 'slug', 'status', 'description', 'tags')), ('Tenancy', ('tenant_group', 'tenant')), ) class Meta: model = Location fields = ( - 'region', 'site_group', 'site', 'parent', 'name', 'slug', 'status', 'description', 'tenant_group', 'tenant', - 'tags', + 'site', 'parent', 'name', 'slug', 'status', 'description', 'tenant_group', 'tenant', 'tags', ) @@ -219,26 +199,9 @@ class RackRoleForm(NetBoxModelForm): class RackForm(TenancyForm, NetBoxModelForm): - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } + selector=True ) location = DynamicModelChoiceField( queryset=Location.objects.all(), @@ -256,48 +219,16 @@ class RackForm(TenancyForm, NetBoxModelForm): class Meta: model = Rack fields = [ - 'region', 'site_group', 'site', 'location', 'name', 'facility_id', 'tenant_group', 'tenant', 'status', - 'role', 'serial', 'asset_tag', 'type', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', - 'outer_unit', 'mounting_depth', 'weight', 'max_weight', 'weight_unit', 'description', 'comments', 'tags', + 'site', 'location', 'name', 'facility_id', 'tenant_group', 'tenant', 'status', 'role', 'serial', + 'asset_tag', 'type', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', + 'mounting_depth', 'weight', 'max_weight', 'weight_unit', 'description', 'comments', 'tags', ] class RackReservationForm(TenancyForm, NetBoxModelForm): - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site = DynamicModelChoiceField( - queryset=Site.objects.all(), - required=False, - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } - ) - location = DynamicModelChoiceField( - queryset=Location.objects.all(), - required=False, - query_params={ - 'site_id': '$site' - } - ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), - query_params={ - 'site_id': '$site', - 'location_id': '$location', - } + selector=True ) units = NumericArrayField( base_field=forms.IntegerField(), @@ -311,15 +242,14 @@ class RackReservationForm(TenancyForm, NetBoxModelForm): comments = CommentField() fieldsets = ( - ('Reservation', ('region', 'site_group', 'site', 'location', 'rack', 'units', 'user', 'description', 'tags')), + ('Reservation', ('rack', 'units', 'user', 'description', 'tags')), ('Tenancy', ('tenant_group', 'tenant')), ) class Meta: model = RackReservation fields = [ - 'region', 'site_group', 'site', 'location', 'rack', 'units', 'user', 'tenant_group', 'tenant', - 'description', 'comments', 'tags', + 'rack', 'units', 'user', 'tenant_group', 'tenant', 'description', 'comments', 'tags', ] @@ -443,7 +373,7 @@ class PlatformForm(NetBoxModelForm): class DeviceForm(TenancyForm, NetBoxModelForm): site = DynamicModelChoiceField( queryset=Site.objects.all(), - with_selector=True + selector=True ) location = DynamicModelChoiceField( queryset=Location.objects.all(), @@ -476,7 +406,7 @@ class DeviceForm(TenancyForm, NetBoxModelForm): ) device_type = DynamicModelChoiceField( queryset=DeviceType.objects.all(), - with_selector=True + selector=True ) device_role = DynamicModelChoiceField( queryset=DeviceRole.objects.all() @@ -488,7 +418,7 @@ class DeviceForm(TenancyForm, NetBoxModelForm): cluster = DynamicModelChoiceField( queryset=Cluster.objects.all(), required=False, - with_selector=True + selector=True ) comments = CommentField() local_context_data = JSONField( @@ -498,7 +428,7 @@ class DeviceForm(TenancyForm, NetBoxModelForm): virtual_chassis = DynamicModelChoiceField( queryset=VirtualChassis.objects.all(), required=False, - with_selector=True + selector=True ) vc_position = forms.IntegerField( required=False, @@ -594,18 +524,9 @@ class ModuleForm(ModuleCommonForm, NetBoxModelForm): 'device_id': '$device' } ) - manufacturer = DynamicModelChoiceField( - queryset=Manufacturer.objects.all(), - required=False, - initial_params={ - 'module_types': '$module_type' - } - ) module_type = DynamicModelChoiceField( queryset=ModuleType.objects.all(), - query_params={ - 'manufacturer_id': '$manufacturer' - } + selector=True ) comments = CommentField() replicate_components = forms.BooleanField( @@ -613,7 +534,6 @@ class ModuleForm(ModuleCommonForm, NetBoxModelForm): initial=True, help_text=_("Automatically populate components associated with this module type") ) - adopt_components = forms.BooleanField( required=False, initial=False, @@ -621,9 +541,7 @@ class ModuleForm(ModuleCommonForm, NetBoxModelForm): ) fieldsets = ( - ('Module', ( - 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'description', 'tags', - )), + ('Module', ('device', 'module_bay', 'module_type', 'status', 'description', 'tags')), ('Hardware', ( 'serial', 'asset_tag', 'replicate_components', 'adopt_components', )), @@ -632,8 +550,8 @@ class ModuleForm(ModuleCommonForm, NetBoxModelForm): class Meta: model = Module fields = [ - 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'serial', 'asset_tag', 'tags', - 'replicate_components', 'adopt_components', 'description', 'comments', + 'device', 'module_bay', 'module_type', 'status', 'serial', 'asset_tag', 'tags', 'replicate_components', + 'adopt_components', 'description', 'comments', ] def __init__(self, *args, **kwargs): @@ -664,26 +582,9 @@ class CableForm(TenancyForm, NetBoxModelForm): class PowerPanelForm(NetBoxModelForm): - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } + selector=True ) location = DynamicModelChoiceField( queryset=Location.objects.all(), @@ -695,80 +596,38 @@ class PowerPanelForm(NetBoxModelForm): comments = CommentField() fieldsets = ( - ('Power Panel', ('region', 'site_group', 'site', 'location', 'name', 'description', 'tags')), + ('Power Panel', ('site', 'location', 'name', 'description', 'tags')), ) class Meta: model = PowerPanel fields = [ - 'region', 'site_group', 'site', 'location', 'name', 'description', 'comments', 'tags', + 'site', 'location', 'name', 'description', 'comments', 'tags', ] class PowerFeedForm(NetBoxModelForm): - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites__powerpanel': '$power_panel' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site = DynamicModelChoiceField( - queryset=Site.objects.all(), - required=False, - initial_params={ - 'powerpanel': '$power_panel' - }, - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } - ) power_panel = DynamicModelChoiceField( queryset=PowerPanel.objects.all(), - query_params={ - 'site_id': '$site' - } - ) - location = DynamicModelChoiceField( - queryset=Location.objects.all(), - required=False, - query_params={ - 'site_id': '$site' - }, - initial_params={ - 'racks': '$rack' - } + selector=True ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, - query_params={ - 'location_id': '$location', - 'site_id': '$site' - } + selector=True ) comments = CommentField() fieldsets = ( - ('Power Panel', ('region', 'site', 'power_panel')), - ('Power Feed', ('location', 'rack', 'name', 'status', 'type', 'description', 'mark_connected', 'tags')), + ('Power Feed', ('power_panel', 'rack', 'name', 'status', 'type', 'description', 'mark_connected', 'tags')), ('Characteristics', ('supply', 'voltage', 'amperage', 'phase', 'max_utilization')), ) class Meta: model = PowerFeed fields = [ - 'region', 'site_group', 'site', 'power_panel', 'location', 'rack', 'name', 'status', 'type', - 'mark_connected', 'supply', 'phase', 'voltage', 'amperage', 'max_utilization', 'description', 'comments', - 'tags', + 'power_panel', 'rack', 'name', 'status', 'type', 'mark_connected', 'supply', 'phase', 'voltage', 'amperage', + 'max_utilization', 'description', 'comments', 'tags', ] @@ -840,43 +699,12 @@ class DeviceVCMembershipForm(forms.ModelForm): class VCMemberSelectForm(BootstrapMixin, forms.Form): - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site = DynamicModelChoiceField( - queryset=Site.objects.all(), - required=False, - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } - ) - rack = DynamicModelChoiceField( - queryset=Rack.objects.all(), - required=False, - null_option='None', - query_params={ - 'site_id': '$site' - } - ) device = DynamicModelChoiceField( queryset=Device.objects.all(), query_params={ - 'site_id': '$site', - 'rack_id': '$rack', 'virtual_chassis_id': 'null', - } + }, + selector=True ) def clean_device(self): @@ -1545,53 +1373,9 @@ class InventoryItemRoleForm(NetBoxModelForm): class VirtualDeviceContextForm(TenancyForm, NetBoxModelForm): - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site = DynamicModelChoiceField( - queryset=Site.objects.all(), - required=False, - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } - ) - location = DynamicModelChoiceField( - queryset=Location.objects.all(), - required=False, - query_params={ - 'site_id': '$site' - }, - initial_params={ - 'racks': '$rack' - } - ) - rack = DynamicModelChoiceField( - queryset=Rack.objects.all(), - required=False, - query_params={ - 'site_id': '$site', - 'location_id': '$location', - } - ) device = DynamicModelChoiceField( queryset=Device.objects.all(), - query_params={ - 'site_id': '$site', - 'location_id': '$location', - 'rack_id': '$rack', - } + selector=True ) primary_ip4 = DynamicModelChoiceField( queryset=IPAddress.objects.all(), @@ -1613,14 +1397,13 @@ class VirtualDeviceContextForm(TenancyForm, NetBoxModelForm): ) fieldsets = ( - ('Assigned Device', ('region', 'site_group', 'site', 'location', 'rack', 'device')), - ('Virtual Device Context', ('name', 'status', 'identifier', 'primary_ip4', 'primary_ip6', 'tags')), + ('Virtual Device Context', ('device', 'name', 'status', 'identifier', 'primary_ip4', 'primary_ip6', 'tags')), ('Tenancy', ('tenant_group', 'tenant')) ) class Meta: model = VirtualDeviceContext fields = [ - 'region', 'site_group', 'site', 'location', 'rack', 'device', 'name', 'status', 'identifier', - 'primary_ip4', 'primary_ip6', 'tenant_group', 'tenant', 'comments', 'tags' + 'device', 'name', 'status', 'identifier', 'primary_ip4', 'primary_ip6', 'tenant_group', 'tenant', + 'comments', 'tags' ] diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index bc4c560ce..87f878407 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -200,40 +200,11 @@ class PrefixForm(TenancyForm, NetBoxModelForm): required=False, label=_('VRF') ) - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - null_option='None', - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } - ) - vlan_group = DynamicModelChoiceField( - queryset=VLANGroup.objects.all(), - required=False, - label=_('VLAN group'), - null_option='None', - query_params={ - 'site': '$site' - }, - initial_params={ - 'vlans': '$vlan' - } + selector=True, + null_option='None' ) vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), @@ -241,7 +212,6 @@ class PrefixForm(TenancyForm, NetBoxModelForm): label=_('VLAN'), query_params={ 'site_id': '$site', - 'group_id': '$vlan_group', } ) role = DynamicModelChoiceField( @@ -252,7 +222,7 @@ class PrefixForm(TenancyForm, NetBoxModelForm): fieldsets = ( ('Prefix', ('prefix', 'status', 'vrf', 'role', 'is_pool', 'mark_utilized', 'description', 'tags')), - ('Site/VLAN Assignment', ('region', 'site_group', 'site', 'vlan_group', 'vlan')), + ('Site/VLAN Assignment', ('site', 'vlan')), ('Tenancy', ('tenant_group', 'tenant')), ) @@ -329,65 +299,22 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): required=False, label=_('VRF') ) - nat_region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - label=_('Region'), - initial_params={ - 'sites': '$nat_site' - } - ) - nat_site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - label=_('Site group'), - initial_params={ - 'sites': '$nat_site' - } - ) - nat_site = DynamicModelChoiceField( - queryset=Site.objects.all(), - required=False, - label=_('Site'), - query_params={ - 'region_id': '$nat_region', - 'group_id': '$nat_site_group', - } - ) - nat_rack = DynamicModelChoiceField( - queryset=Rack.objects.all(), - required=False, - label=_('Rack'), - null_option='None', - query_params={ - 'site_id': '$site' - } - ) nat_device = DynamicModelChoiceField( queryset=Device.objects.all(), required=False, - label=_('Device'), - query_params={ - 'site_id': '$site', - 'rack_id': '$nat_rack', - } - ) - nat_cluster = DynamicModelChoiceField( - queryset=Cluster.objects.all(), - required=False, - label=_('Cluster') + selector=True, + label=_('Device') ) nat_virtual_machine = DynamicModelChoiceField( queryset=VirtualMachine.objects.all(), required=False, - label=_('Virtual Machine'), - query_params={ - 'cluster_id': '$nat_cluster', - } + selector=True, + label=_('Virtual Machine') ) nat_vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, + selector=True, label=_('VRF') ) nat_inside = DynamicModelChoiceField( @@ -409,9 +336,8 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): class Meta: model = IPAddress fields = [ - 'address', 'vrf', 'status', 'role', 'dns_name', 'primary_for_parent', 'nat_site', 'nat_rack', 'nat_device', - 'nat_cluster', 'nat_virtual_machine', 'nat_vrf', 'nat_inside', 'tenant_group', 'tenant', 'description', - 'comments', 'tags', + 'address', 'vrf', 'status', 'role', 'dns_name', 'primary_for_parent', 'nat_device', 'nat_virtual_machine', + 'nat_vrf', 'nat_inside', 'tenant_group', 'tenant', 'description', 'comments', 'tags', ] def __init__(self, *args, **kwargs): @@ -803,11 +729,13 @@ class ServiceTemplateForm(NetBoxModelForm): class ServiceForm(NetBoxModelForm): device = DynamicModelChoiceField( queryset=Device.objects.all(), - required=False + required=False, + selector=True ) virtual_machine = DynamicModelChoiceField( queryset=VirtualMachine.objects.all(), - required=False + required=False, + selector=True ) ports = NumericArrayField( base_field=forms.IntegerField( @@ -907,43 +835,21 @@ class L2VPNTerminationForm(NetBoxModelForm): label=_('L2VPN'), fetch_trigger='open' ) - device_vlan = DynamicModelChoiceField( - queryset=Device.objects.all(), - label=_("Available on Device"), - required=False, - query_params={} - ) vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), required=False, - query_params={ - 'available_on_device': '$device_vlan' - }, + selector=True, label=_('VLAN') ) - device = DynamicModelChoiceField( - queryset=Device.objects.all(), - required=False, - query_params={} - ) interface = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, - query_params={ - 'device_id': '$device' - } - ) - virtual_machine = DynamicModelChoiceField( - queryset=VirtualMachine.objects.all(), - required=False, - query_params={} + selector=True ) vminterface = DynamicModelChoiceField( queryset=VMInterface.objects.all(), required=False, - query_params={ - 'virtual_machine_id': '$virtual_machine' - }, + selector=True, label=_('Interface') ) @@ -957,7 +863,6 @@ class L2VPNTerminationForm(NetBoxModelForm): if instance: if type(instance.assigned_object) is Interface: - initial['device'] = instance.assigned_object.parent initial['interface'] = instance.assigned_object elif type(instance.assigned_object) is VLAN: initial['vlan'] = instance.assigned_object diff --git a/netbox/templates/circuits/circuittermination_edit.html b/netbox/templates/circuits/circuittermination_edit.html index f171ecc1b..acfb8d0ca 100644 --- a/netbox/templates/circuits/circuittermination_edit.html +++ b/netbox/templates/circuits/circuittermination_edit.html @@ -27,12 +27,9 @@
- {% render_field form.region %} - {% render_field form.site_group %} {% render_field form.site %}
- {% render_field form.provider_network_provider %} {% render_field form.provider_network %}
diff --git a/netbox/templates/dcim/device_edit.html b/netbox/templates/dcim/device_edit.html index 4475dac9b..d0677ad20 100644 --- a/netbox/templates/dcim/device_edit.html +++ b/netbox/templates/dcim/device_edit.html @@ -113,7 +113,3 @@ {% endblock %} - -{% block modals %} - {% include 'inc/htmx_modal.html' with size='lg' %} -{% endblock %} diff --git a/netbox/templates/dcim/rack_edit.html b/netbox/templates/dcim/rack_edit.html index cd9ed637a..413feff31 100644 --- a/netbox/templates/dcim/rack_edit.html +++ b/netbox/templates/dcim/rack_edit.html @@ -6,8 +6,6 @@
Rack
- {% render_field form.region %} - {% render_field form.site_group %} {% render_field form.site %} {% render_field form.location %} {% render_field form.name %} diff --git a/netbox/templates/generic/object_edit.html b/netbox/templates/generic/object_edit.html index 8531ad6df..26ceb7987 100644 --- a/netbox/templates/generic/object_edit.html +++ b/netbox/templates/generic/object_edit.html @@ -74,3 +74,7 @@ Context: {% endblock content-wrapper %} + +{% block modals %} + {% include 'inc/htmx_modal.html' with size='lg' %} +{% endblock %} diff --git a/netbox/templates/ipam/ipaddress_edit.html b/netbox/templates/ipam/ipaddress_edit.html index b9a988009..95c566cc9 100644 --- a/netbox/templates/ipam/ipaddress_edit.html +++ b/netbox/templates/ipam/ipaddress_edit.html @@ -121,14 +121,9 @@
- {% render_field form.nat_region %} - {% render_field form.nat_site_group %} - {% render_field form.nat_site %} - {% render_field form.nat_rack %} {% render_field form.nat_device %}
- {% render_field form.nat_cluster %} {% render_field form.nat_virtual_machine %}
diff --git a/netbox/templates/ipam/l2vpntermination_edit.html b/netbox/templates/ipam/l2vpntermination_edit.html index 4379a0899..66c9a4337 100644 --- a/netbox/templates/ipam/l2vpntermination_edit.html +++ b/netbox/templates/ipam/l2vpntermination_edit.html @@ -32,15 +32,12 @@
- {% render_field form.device_vlan %} {% render_field form.vlan %}
- {% render_field form.device %} {% render_field form.interface %}
- {% render_field form.virtual_machine %} {% render_field form.vminterface %}
diff --git a/netbox/utilities/forms/fields/dynamic.py b/netbox/utilities/forms/fields/dynamic.py index 440a910e0..2719637c8 100644 --- a/netbox/utilities/forms/fields/dynamic.py +++ b/netbox/utilities/forms/fields/dynamic.py @@ -26,6 +26,7 @@ class DynamicModelChoiceMixin: choice (optional) fetch_trigger: The event type which will cause the select element to fetch data from the API. Must be 'load', 'open', or 'collapse'. (optional) + selector: Include an advanced object selection widget to assist the user in identifying the desired object """ filter = django_filters.ModelChoiceFilter widget = widgets.APISelect @@ -40,7 +41,7 @@ class DynamicModelChoiceMixin: disabled_indicator=None, fetch_trigger=None, empty_label=None, - with_selector=False, + selector=False, **kwargs ): self.model = queryset.model @@ -49,7 +50,7 @@ class DynamicModelChoiceMixin: self.null_option = null_option self.disabled_indicator = disabled_indicator self.fetch_trigger = fetch_trigger - self.with_selector = with_selector + self.selector = selector # to_field_name is set by ModelChoiceField.__init__(), but we need to set it early for reference # by widget_attrs() @@ -84,7 +85,7 @@ class DynamicModelChoiceMixin: widget.add_query_params(self.query_params) # Include object selector? - if self.with_selector: + if self.selector: attrs['selector'] = self.model._meta.label_lower return attrs diff --git a/netbox/virtualization/forms/model_forms.py b/netbox/virtualization/forms/model_forms.py index 03be99894..edf26fb1f 100644 --- a/netbox/virtualization/forms/model_forms.py +++ b/netbox/virtualization/forms/model_forms.py @@ -65,41 +65,22 @@ class ClusterForm(TenancyForm, NetBoxModelForm): queryset=ClusterGroup.objects.all(), required=False ) - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } + selector=True ) comments = CommentField() fieldsets = ( - ('Cluster', ('name', 'type', 'group', 'status', 'description', 'tags')), - ('Site', ('region', 'site_group', 'site')), + ('Cluster', ('name', 'type', 'group', 'site', 'status', 'description', 'tags')), ('Tenancy', ('tenant_group', 'tenant')), ) class Meta: model = Cluster fields = ( - 'name', 'type', 'group', 'status', 'tenant', 'region', 'site_group', 'site', 'description', 'comments', - 'tags', + 'name', 'type', 'group', 'status', 'tenant', 'site', 'description', 'comments', 'tags', ) @@ -178,20 +159,12 @@ class VirtualMachineForm(TenancyForm, NetBoxModelForm): queryset=Site.objects.all(), required=False ) - cluster_group = DynamicModelChoiceField( - queryset=ClusterGroup.objects.all(), - required=False, - null_option='None', - initial_params={ - 'clusters': '$cluster' - } - ) cluster = DynamicModelChoiceField( queryset=Cluster.objects.all(), required=False, + selector=True, query_params={ 'site_id': '$site', - 'group_id': '$cluster_group', } ) device = DynamicModelChoiceField( @@ -222,7 +195,7 @@ class VirtualMachineForm(TenancyForm, NetBoxModelForm): fieldsets = ( ('Virtual Machine', ('name', 'role', 'status', 'description', 'tags')), - ('Site/Cluster', ('site', 'cluster_group', 'cluster', 'device')), + ('Site/Cluster', ('site', 'cluster', 'device')), ('Tenancy', ('tenant_group', 'tenant')), ('Management', ('platform', 'primary_ip4', 'primary_ip6')), ('Resources', ('vcpus', 'memory', 'disk')), @@ -232,9 +205,8 @@ class VirtualMachineForm(TenancyForm, NetBoxModelForm): class Meta: model = VirtualMachine fields = [ - 'name', 'status', 'site', 'cluster_group', 'cluster', 'device', 'role', 'tenant_group', 'tenant', - 'platform', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments', 'tags', - 'local_context_data', + 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant_group', 'tenant', 'platform', 'primary_ip4', + 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments', 'tags', 'local_context_data', ] def __init__(self, *args, **kwargs): diff --git a/netbox/wireless/forms/model_forms.py b/netbox/wireless/forms/model_forms.py index 55217369e..aff81232f 100644 --- a/netbox/wireless/forms/model_forms.py +++ b/netbox/wireless/forms/model_forms.py @@ -38,55 +38,16 @@ class WirelessLANForm(TenancyForm, NetBoxModelForm): queryset=WirelessLANGroup.objects.all(), required=False ) - region = DynamicModelChoiceField( - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site_group = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - site = DynamicModelChoiceField( - queryset=Site.objects.all(), - required=False, - null_option='None', - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } - ) - vlan_group = DynamicModelChoiceField( - queryset=VLANGroup.objects.all(), - required=False, - label=_('VLAN group'), - null_option='None', - query_params={ - 'site': '$site' - }, - initial_params={ - 'vlans': '$vlan' - } - ) vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), required=False, - label=_('VLAN'), - query_params={ - 'site_id': '$site', - 'group_id': '$vlan_group', - } + selector=True, + label=_('VLAN') ) comments = CommentField() fieldsets = ( - ('Wireless LAN', ('ssid', 'group', 'status', 'description', 'tags')), - ('VLAN', ('region', 'site_group', 'site', 'vlan_group', 'vlan',)), + ('Wireless LAN', ('ssid', 'group', 'vlan', 'status', 'description', 'tags')), ('Tenancy', ('tenant_group', 'tenant')), ('Authentication', ('auth_type', 'auth_cipher', 'auth_psk')), ) @@ -94,8 +55,8 @@ class WirelessLANForm(TenancyForm, NetBoxModelForm): class Meta: model = WirelessLAN fields = [ - 'ssid', 'group', 'region', 'site_group', 'site', 'status', 'vlan_group', 'vlan', 'tenant_group', 'tenant', - 'auth_type', 'auth_cipher', 'auth_psk', 'description', 'comments', 'tags', + 'ssid', 'group', 'status', 'vlan', 'tenant_group', 'tenant', 'auth_type', 'auth_cipher', 'auth_psk', + 'description', 'comments', 'tags', ]