From 7598b891c1e356a0df77850b50877f9340e235d3 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 4 Nov 2020 11:09:13 -0500 Subject: [PATCH] Add initial_params to all forms --- netbox/dcim/forms.py | 13 ++++--------- netbox/dcim/tests/test_forms.py | 17 ----------------- netbox/ipam/forms.py | 23 +++++++++++------------ netbox/tenancy/forms.py | 16 ++++------------ netbox/utilities/forms/fields.py | 3 ++- netbox/virtualization/forms.py | 13 ++++--------- 6 files changed, 25 insertions(+), 60 deletions(-) diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 7a4b9aaff..838a6508e 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -4280,7 +4280,10 @@ class PowerPanelFilterForm(BootstrapMixin, CustomFieldFilterForm): class PowerFeedForm(BootstrapMixin, CustomFieldModelForm): site = DynamicModelChoiceField( queryset=Site.objects.all(), - required=False + required=False, + initial_params={ + 'powerpanel_set': '$power_panel' + } ) power_panel = DynamicModelChoiceField( queryset=PowerPanel.objects.all(), @@ -4315,14 +4318,6 @@ class PowerFeedForm(BootstrapMixin, CustomFieldModelForm): 'phase': StaticSelect2(), } - def __init__(self, *args, **kwargs): - - super().__init__(*args, **kwargs) - - # Initialize site field - if self.instance and hasattr(self.instance, 'power_panel'): - self.initial['site'] = self.instance.power_panel.site - class PowerFeedCSVForm(CustomFieldModelCSVForm): site = CSVModelChoiceField( diff --git a/netbox/dcim/tests/test_forms.py b/netbox/dcim/tests/test_forms.py index aadc2cbfc..e8cb73fe4 100644 --- a/netbox/dcim/tests/test_forms.py +++ b/netbox/dcim/tests/test_forms.py @@ -100,23 +100,6 @@ class DeviceTestCase(TestCase): self.assertIn('face', form.errors) self.assertIn('position', form.errors) - def test_initial_data_population(self): - device_type = DeviceType.objects.first() - cluster = Cluster.objects.first() - test = DeviceForm(initial={ - 'device_type': device_type.pk, - 'device_role': DeviceRole.objects.first().pk, - 'status': DeviceStatusChoices.STATUS_ACTIVE, - 'site': Site.objects.first().pk, - 'cluster': cluster.pk, - }) - - # Check that the initial value for the manufacturer is set automatically when assigning the device type - self.assertEqual(test.initial['manufacturer'], device_type.manufacturer.pk) - - # Check that the initial value for the cluster group is set automatically when assigning the cluster - self.assertEqual(test.initial['cluster_group'], cluster.group.pk) - class LabelTestCase(TestCase): diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 75a4caf10..b49fb2e41 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -265,6 +265,9 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): null_option='None', query_params={ 'site_id': '$site' + }, + initial_params={ + 'vlans': '$vlan' } ) vlan = DynamicModelChoiceField( @@ -297,14 +300,6 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } def __init__(self, *args, **kwargs): - - # Initialize helper selectors - instance = kwargs.get('instance') - initial = kwargs.get('initial', {}).copy() - if instance and instance.vlan is not None: - initial['vlan_group'] = instance.vlan.group - kwargs['initial'] = initial - super().__init__(*args, **kwargs) self.fields['vrf'].empty_label = 'Global' @@ -501,7 +496,10 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel device = DynamicModelChoiceField( queryset=Device.objects.all(), required=False, - display_field='display_name' + display_field='display_name', + initial_params={ + 'interfaces': '$interface' + } ) interface = DynamicModelChoiceField( queryset=Interface.objects.all(), @@ -512,7 +510,10 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel ) virtual_machine = DynamicModelChoiceField( queryset=VirtualMachine.objects.all(), - required=False + required=False, + initial_params={ + 'interfaces': '$vminterface' + } ) vminterface = DynamicModelChoiceField( queryset=VMInterface.objects.all(), @@ -611,10 +612,8 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel initial = kwargs.get('initial', {}).copy() if instance: if type(instance.assigned_object) is Interface: - initial['device'] = instance.assigned_object.device initial['interface'] = instance.assigned_object elif type(instance.assigned_object) is VMInterface: - initial['virtual_machine'] = instance.assigned_object.virtual_machine initial['vminterface'] = instance.assigned_object if instance.nat_inside: nat_inside_parent = instance.nat_inside.assigned_object diff --git a/netbox/tenancy/forms.py b/netbox/tenancy/forms.py index 142333bff..bceab7ce7 100644 --- a/netbox/tenancy/forms.py +++ b/netbox/tenancy/forms.py @@ -119,7 +119,10 @@ class TenancyForm(forms.Form): tenant_group = DynamicModelChoiceField( queryset=TenantGroup.objects.all(), required=False, - null_option='None' + null_option='None', + initial_params={ + 'tenants': '$tenant' + } ) tenant = DynamicModelChoiceField( queryset=Tenant.objects.all(), @@ -129,17 +132,6 @@ class TenancyForm(forms.Form): } ) - def __init__(self, *args, **kwargs): - - # Initialize helper selector - instance = kwargs.get('instance') - if instance and instance.tenant is not None: - initial = kwargs.get('initial', {}).copy() - initial['tenant_group'] = instance.tenant.group - kwargs['initial'] = initial - - super().__init__(*args, **kwargs) - class TenancyFilterForm(forms.Form): tenant_group = DynamicModelMultipleChoiceField( diff --git a/netbox/utilities/forms/fields.py b/netbox/utilities/forms/fields.py index 982b80323..92e40e7bb 100644 --- a/netbox/utilities/forms/fields.py +++ b/netbox/utilities/forms/fields.py @@ -309,7 +309,8 @@ class DynamicModelChoiceMixin: value = form.initial.get(child_field.lstrip('$')) if value: filter_kwargs[kwarg] = value - self.initial = self.queryset.filter(**filter_kwargs).first() + if filter_kwargs: + self.initial = self.queryset.filter(**filter_kwargs).first() # Modify the QuerySet of the field before we return it. Limit choices to any data already bound: Options # will be populated on-demand via the APISelect widget. diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index 712b39f9f..f99840f86 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -266,7 +266,10 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): cluster_group = DynamicModelChoiceField( queryset=ClusterGroup.objects.all(), required=False, - null_option='None' + null_option='None', + initial_params={ + 'clusters': '$cluster' + } ) cluster = DynamicModelChoiceField( queryset=Cluster.objects.all(), @@ -311,14 +314,6 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } def __init__(self, *args, **kwargs): - - # Initialize helper selector - instance = kwargs.get('instance') - if instance.pk and instance.cluster is not None: - initial = kwargs.get('initial', {}).copy() - initial['cluster_group'] = instance.cluster.group - kwargs['initial'] = initial - super().__init__(*args, **kwargs) if self.instance.pk: