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:
@ -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'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -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(
|
||||||
|
@ -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'
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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',
|
||||||
|
Reference in New Issue
Block a user