1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Add display_field kwarg to DynamicModelChoiceMixin

This commit is contained in:
Jeremy Stretch
2020-08-11 17:00:28 -04:00
parent 2c64d45c69
commit fdc43f8279
5 changed files with 40 additions and 45 deletions

View File

@ -716,9 +716,7 @@ class RackElevationFilterForm(RackFilterForm):
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
label='Rack', label='Rack',
required=False, required=False,
widget=APISelectMultiple( display_field='display_name'
display_field='display_name',
)
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -1048,10 +1046,8 @@ class ComponentTemplateCreateForm(ComponentForm):
) )
device_type = DynamicModelChoiceField( device_type = DynamicModelChoiceField(
queryset=DeviceType.objects.all(), queryset=DeviceType.objects.all(),
widget=APISelect(
display_field='model' display_field='model'
) )
)
description = forms.CharField( description = forms.CharField(
required=False required=False
) )
@ -1739,10 +1735,8 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
rack = DynamicModelChoiceField( rack = DynamicModelChoiceField(
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
required=False, required=False,
widget=APISelect(
display_field='display_name' display_field='display_name'
) )
)
position = forms.TypedChoiceField( position = forms.TypedChoiceField(
required=False, required=False,
empty_value=None, empty_value=None,
@ -1764,10 +1758,8 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
) )
device_type = DynamicModelChoiceField( device_type = DynamicModelChoiceField(
queryset=DeviceType.objects.all(), queryset=DeviceType.objects.all(),
widget=APISelect(
display_field='model' display_field='model'
) )
)
device_role = DynamicModelChoiceField( device_role = DynamicModelChoiceField(
queryset=DeviceRole.objects.all() queryset=DeviceRole.objects.all()
) )
@ -2078,9 +2070,7 @@ class DeviceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditF
device_type = DynamicModelChoiceField( device_type = DynamicModelChoiceField(
queryset=DeviceType.objects.all(), queryset=DeviceType.objects.all(),
required=False, required=False,
widget=APISelect( display_field='model'
display_field="model",
)
) )
device_role = DynamicModelChoiceField( device_role = DynamicModelChoiceField(
queryset=DeviceRole.objects.all(), queryset=DeviceRole.objects.all(),
@ -2184,9 +2174,7 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt
queryset=DeviceType.objects.all(), queryset=DeviceType.objects.all(),
required=False, required=False,
label='Model', label='Model',
widget=APISelectMultiple( display_field='model'
display_field="model",
)
) )
platform = DynamicModelMultipleChoiceField( platform = DynamicModelMultipleChoiceField(
queryset=Platform.objects.all(), queryset=Platform.objects.all(),
@ -2715,8 +2703,8 @@ class InterfaceForm(InterfaceCommonForm, BootstrapMixin, forms.ModelForm):
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
label='Untagged VLAN', label='Untagged VLAN',
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -2727,8 +2715,8 @@ class InterfaceForm(InterfaceCommonForm, BootstrapMixin, forms.ModelForm):
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
label='Tagged VLANs', label='Tagged VLANs',
widget=APISelectMultiple(
display_field='display_name', display_field='display_name',
widget=APISelectMultiple(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -2816,8 +2804,8 @@ class InterfaceCreateForm(ComponentCreateForm, InterfaceCommonForm):
untagged_vlan = DynamicModelChoiceField( untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -2827,8 +2815,8 @@ class InterfaceCreateForm(ComponentCreateForm, InterfaceCommonForm):
tagged_vlans = DynamicModelMultipleChoiceField( tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelectMultiple(
display_field='display_name', display_field='display_name',
widget=APISelectMultiple(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -2885,8 +2873,8 @@ class InterfaceBulkEditForm(
untagged_vlan = DynamicModelChoiceField( untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -2896,8 +2884,8 @@ class InterfaceBulkEditForm(
tagged_vlans = DynamicModelMultipleChoiceField( tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelectMultiple(
display_field='display_name', display_field='display_name',
widget=APISelectMultiple(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -3514,8 +3502,8 @@ class ConnectCableToDeviceForm(BootstrapMixin, forms.ModelForm):
queryset=Device.objects.all(), queryset=Device.objects.all(),
label='Device', label='Device',
required=False, required=False,
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
filter_for={ filter_for={
'termination_b_id': 'device_id', 'termination_b_id': 'device_id',
} }
@ -3632,8 +3620,8 @@ class ConnectCableToCircuitTerminationForm(BootstrapMixin, forms.ModelForm):
termination_b_circuit = DynamicModelChoiceField( termination_b_circuit = DynamicModelChoiceField(
queryset=Circuit.objects.all(), queryset=Circuit.objects.all(),
label='Circuit', label='Circuit',
widget=APISelect(
display_field='cid', display_field='cid',
widget=APISelect(
filter_for={ filter_for={
'termination_b_id': 'circuit_id', 'termination_b_id': 'circuit_id',
} }
@ -3662,8 +3650,8 @@ class ConnectCableToPowerFeedForm(BootstrapMixin, forms.ModelForm):
queryset=Site.objects.all(), queryset=Site.objects.all(),
label='Site', label='Site',
required=False, required=False,
widget=APISelect(
display_field='cid', display_field='cid',
widget=APISelect(
filter_for={ filter_for={
'termination_b_rackgroup': 'site_id', 'termination_b_rackgroup': 'site_id',
'termination_b_powerpanel': 'site_id', 'termination_b_powerpanel': 'site_id',
@ -3674,8 +3662,8 @@ class ConnectCableToPowerFeedForm(BootstrapMixin, forms.ModelForm):
queryset=RackGroup.objects.all(), queryset=RackGroup.objects.all(),
label='Rack Group', label='Rack Group',
required=False, required=False,
widget=APISelect(
display_field='cid', display_field='cid',
widget=APISelect(
filter_for={ filter_for={
'termination_b_powerpanel': 'rackgroup_id', 'termination_b_powerpanel': 'rackgroup_id',
} }
@ -4199,8 +4187,8 @@ class VCMemberSelectForm(BootstrapMixin, forms.Form):
queryset=Device.objects.filter( queryset=Device.objects.filter(
virtual_chassis__isnull=True virtual_chassis__isnull=True
), ),
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
disabled_indicator='virtual_chassis' disabled_indicator='virtual_chassis'
) )
) )

View File

@ -413,9 +413,9 @@ class ObjectChangeFilterForm(BootstrapMixin, forms.Form):
user = DynamicModelMultipleChoiceField( user = DynamicModelMultipleChoiceField(
queryset=User.objects.all(), queryset=User.objects.all(),
required=False, required=False,
display_field='username',
widget=APISelectMultiple( widget=APISelectMultiple(
api_url='/api/users/users/', api_url='/api/users/users/',
display_field='username'
) )
) )
changed_object_type = forms.ModelChoiceField( changed_object_type = forms.ModelChoiceField(

View File

@ -287,10 +287,8 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
label='VLAN', label='VLAN',
widget=APISelect(
display_field='display_name' display_field='display_name'
) )
)
role = DynamicModelChoiceField( role = DynamicModelChoiceField(
queryset=Role.objects.all(), queryset=Role.objects.all(),
required=False required=False
@ -569,8 +567,8 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
required=False, required=False,
label='Rack', label='Rack',
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
filter_for={ filter_for={
'nat_device': 'rack_id' 'nat_device': 'rack_id'
}, },
@ -583,8 +581,8 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
queryset=Device.objects.all(), queryset=Device.objects.all(),
required=False, required=False,
label='Device', label='Device',
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
filter_for={ filter_for={
'nat_inside': 'device_id' 'nat_inside': 'device_id'
} }
@ -604,10 +602,8 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
queryset=IPAddress.objects.all(), queryset=IPAddress.objects.all(),
required=False, required=False,
label='IP Address', label='IP Address',
widget=APISelect(
display_field='address' display_field='address'
) )
)
primary_for_parent = forms.BooleanField( primary_for_parent = forms.BooleanField(
required=False, required=False,
label='Make this the primary IP for the device/VM' label='Make this the primary IP for the device/VM'

View File

@ -11,6 +11,7 @@ from django.db.models import Count
from django.forms import BoundField from django.forms import BoundField
from django.urls import reverse from django.urls import reverse
from utilities.api import get_serializer_for_model
from utilities.choices import unpack_grouped_choices from utilities.choices import unpack_grouped_choices
from utilities.validators import EnhancedURLValidator from utilities.validators import EnhancedURLValidator
from . import widgets from . import widgets
@ -247,6 +248,16 @@ class DynamicModelChoiceMixin:
filter = django_filters.ModelChoiceFilter filter = django_filters.ModelChoiceFilter
widget = widgets.APISelect widget = widgets.APISelect
def __init__(self, *args, display_field='name', **kwargs):
self.display_field = display_field
super().__init__(*args, **kwargs)
def widget_attrs(self, widget):
return {
'display-field': self.display_field
}
def get_bound_field(self, form, field_name): def get_bound_field(self, form, field_name):
bound_field = BoundField(form, self, field_name) bound_field = BoundField(form, self, field_name)

View File

@ -240,8 +240,8 @@ class ClusterAddDevicesForm(BootstrapMixin, forms.Form):
) )
devices = DynamicModelMultipleChoiceField( devices = DynamicModelMultipleChoiceField(
queryset=Device.objects.filter(cluster__isnull=True), queryset=Device.objects.filter(cluster__isnull=True),
widget=APISelectMultiple(
display_field='display_name', display_field='display_name',
widget=APISelectMultiple(
disabled_indicator='cluster' disabled_indicator='cluster'
) )
) )
@ -575,8 +575,8 @@ class VMInterfaceForm(BootstrapMixin, forms.ModelForm):
untagged_vlan = DynamicModelChoiceField( untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -586,8 +586,8 @@ class VMInterfaceForm(BootstrapMixin, forms.ModelForm):
tagged_vlans = DynamicModelMultipleChoiceField( tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelectMultiple(
display_field='display_name', display_field='display_name',
widget=APISelectMultiple(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -679,8 +679,8 @@ class VMInterfaceCreateForm(BootstrapMixin, forms.Form):
untagged_vlan = DynamicModelChoiceField( untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -690,8 +690,8 @@ class VMInterfaceCreateForm(BootstrapMixin, forms.Form):
tagged_vlans = DynamicModelMultipleChoiceField( tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelectMultiple(
display_field='display_name', display_field='display_name',
widget=APISelectMultiple(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -773,8 +773,8 @@ class VMInterfaceBulkEditForm(BootstrapMixin, BulkEditForm):
untagged_vlan = DynamicModelChoiceField( untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelect(
display_field='display_name', display_field='display_name',
widget=APISelect(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',
@ -784,8 +784,8 @@ class VMInterfaceBulkEditForm(BootstrapMixin, BulkEditForm):
tagged_vlans = DynamicModelMultipleChoiceField( tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
required=False, required=False,
widget=APISelectMultiple(
display_field='display_name', display_field='display_name',
widget=APISelectMultiple(
full=True, full=True,
additional_query_params={ additional_query_params={
'site_id': 'null', 'site_id': 'null',