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

initial select2 support

This commit is contained in:
John Anderson
2018-12-30 02:35:18 -05:00
parent d144d3a584
commit 28a02e9943
70 changed files with 13199 additions and 143 deletions

View File

@@ -750,6 +750,10 @@ class InterfaceFilter(django_filters.FilterSet):
"""
Not using DeviceComponentFilterSet for Interfaces because we need to check for VirtualChassis membership.
"""
q = django_filters.CharFilter(
method='search',
label='Search',
)
device = django_filters.CharFilter(
method='filter_device',
field_name='name',
@@ -796,6 +800,13 @@ class InterfaceFilter(django_filters.FilterSet):
model = Interface
fields = ['name', 'connection_status', 'form_factor', 'enabled', 'mtu', 'mgmt_only']
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value)
).distinct()
def filter_device(self, queryset, name, value):
try:
device = Device.objects.get(**{name: value})

View File

@@ -1247,7 +1247,7 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
# If editing an existing device, exclude it from the list of occupied rack units. This ensures that a device
# can be flipped from one face to another.
self.fields['position'].widget.attrs['api-url'] += '&exclude={}'.format(self.instance.pk)
self.fields['position'].widget.add_additional_query_param('exclude', self.instance.pk)
# Limit platform by manufacturer
self.fields['platform'].queryset = Platform.objects.filter(
@@ -2243,7 +2243,8 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
required=False,
widget=forms.Select(
attrs={
'filter-for': 'termination_b_rack',
'data-filter-for-termination_b_rack': 'site_id',
'data-filter-for-termination_b_device': 'site_id',
}
)
)
@@ -2255,9 +2256,9 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
label='Rack',
required=False,
widget=APISelect(
api_url='/api/dcim/racks/?site_id={{termination_b_site}}',
api_url='/api/dcim/racks/',
attrs={
'filter-for': 'termination_b_device',
'data-filter-for-termination_b_device': 'rack_id',
'nullable': 'true',
}
)
@@ -2269,12 +2270,11 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
('rack', 'termination_b_rack'),
),
label='Device',
required=False,
widget=APISelect(
api_url='/api/dcim/devices/?site_id={{termination_b_site}}&rack_id={{termination_b_rack}}',
api_url='/api/dcim/devices/',
display_field='display_name',
attrs={
'filter-for': 'termination_b_id',
'data-filter-for-termination_b_id': 'device_id',
}
)
)
@@ -2290,19 +2290,15 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
termination_b_type = forms.ModelChoiceField(
queryset=ContentType.objects.all(),
label='Type',
widget=ContentTypeSelect(
attrs={
'filter-for': 'termination_b_id',
}
)
widget=ContentTypeSelect()
)
termination_b_id = forms.IntegerField(
label='Name',
widget=APISelect(
api_url='/api/dcim/{{termination_b_type}}s/?device_id={{termination_b_device}}',
api_url='/api/dcim/{{termination_b_type}}s/',
disabled_indicator='cable',
url_conditional_append={
'termination_b_type__interface': '&type=physical',
conditional_query_params={
'termination_b_type__interface': 'type=physical',
}
)
)
@@ -2310,7 +2306,7 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
class Meta:
model = Cable
fields = [
'termination_b_site', 'termination_b_rack', 'termination_b_device', 'livesearch', 'termination_b_type',
'termination_b_site', 'termination_b_rack', 'termination_b_device', 'termination_b_type',
'termination_b_id', 'type', 'status', 'label', 'color', 'length', 'length_unit',
]