From 86bafbb7606cc27a3f8f1ea3d17ba8ac8c93cc73 Mon Sep 17 00:00:00 2001 From: John Anderson Date: Wed, 9 Jan 2019 23:33:08 -0500 Subject: [PATCH] Tenancy Select2 forms --- .gitignore | 1 + netbox/dcim/forms.py | 28 +++++++++++----------------- netbox/tenancy/forms.py | 19 +++++++++++++------ 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index e6e625454..d859bad28 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ fabfile.py *.swp gunicorn_config.py .DS_Store +.vscode diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 2765d0ba9..397eaea45 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -5,7 +5,7 @@ from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.contrib.postgres.forms.array import SimpleArrayField from django.core.exceptions import ObjectDoesNotExist -from django.db.models import Count, Q +from django.db.models import Q from mptt.forms import TreeNodeChoiceField from taggit.forms import TagField from timezone_field import TimeZoneFormField @@ -15,13 +15,11 @@ from ipam.models import IPAddress, VLAN, VLANGroup from tenancy.forms import TenancyForm from tenancy.models import Tenant from utilities.forms import ( - AnnotatedMultipleChoiceField, APISelect, APISelectMultiple, add_blank_choice, ArrayFieldSelectMultiple, - BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ChainedFieldsMixin, ChainedModelChoiceField, - ColorSelect, CommentField, ComponentForm, ConfirmationForm, ContentTypeSelect, CSVChoiceField, - ExpandableNameField, FilterChoiceField, FilterTreeNodeMultipleChoiceField, FlexibleModelChoiceField, - JSONField, Livesearch, SelectWithPK, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple, - BOOLEAN_WITH_BLANK_CHOICES, COLOR_CHOICES, - + APISelect, APISelectMultiple, add_blank_choice, ArrayFieldSelectMultiple, BootstrapMixin, BulkEditForm, + BulkEditNullBooleanSelect, ChainedFieldsMixin, ChainedModelChoiceField, ColorSelect, CommentField, + ComponentForm, ConfirmationForm, ContentTypeSelect, CSVChoiceField, ExpandableNameField, + FilterChoiceField, FlexibleModelChoiceField, JSONField, SelectWithPK, SmallTextarea, SlugField, + StaticSelect2, StaticSelect2Multiple, BOOLEAN_WITH_BLANK_CHOICES ) from virtualization.models import Cluster, ClusterGroup from .constants import * @@ -29,7 +27,7 @@ from .models import ( Cable, DeviceBay, DeviceBayTemplate, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate, Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, - RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis, + RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis ) DEVICE_BY_PK_RE = r'{\d+\}' @@ -631,10 +629,8 @@ class RackFilterForm(BootstrapMixin, CustomFieldFilterForm): null_option=True, ) ) - status = AnnotatedMultipleChoiceField( + status = forms.MultipleChoiceField( choices=RACK_STATUS_CHOICES, - annotate=Rack.objects.all(), - annotate_field='status', required=False, widget=StaticSelect2Multiple() ) @@ -1747,10 +1743,8 @@ class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm): null_option=True, ) ) - status = AnnotatedMultipleChoiceField( + status = forms.MultipleChoiceField( choices=DEVICE_STATUS_CHOICES, - annotate=Device.objects.all(), - annotate_field='status', required=False, widget=StaticSelect2Multiple() ) @@ -2085,8 +2079,8 @@ class InterfaceAssignVLANsForm(BootstrapMixin, forms.ModelForm): # Add non-grouped global VLANs global_vlans = VLAN.objects.filter(site=None, group=None).exclude(pk__in=assigned_vlans) - vlan_choices.append(( - 'Global', [(vlan.pk, vlan) for vlan in global_vlans]) + vlan_choices.append( + ('Global', [(vlan.pk, vlan) for vlan in global_vlans]) ) # Add grouped global VLANs diff --git a/netbox/tenancy/forms.py b/netbox/tenancy/forms.py index 083bf7f78..3c97eb801 100644 --- a/netbox/tenancy/forms.py +++ b/netbox/tenancy/forms.py @@ -4,7 +4,8 @@ from taggit.forms import TagField from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm from utilities.forms import ( - APISelect, BootstrapMixin, ChainedFieldsMixin, ChainedModelChoiceField, CommentField, FilterChoiceField, SlugField, + APISelect, APISelectMultiple, BootstrapMixin, ChainedFieldsMixin, ChainedModelChoiceField, CommentField, + FilterChoiceField, SlugField, ) from .models import Tenant, TenantGroup @@ -85,7 +86,10 @@ class TenantBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditF ) group = forms.ModelChoiceField( queryset=TenantGroup.objects.all(), - required=False + required=False, + widget=APISelect( + api_url="/api/tenancy/tenant-groups/" + ) ) class Meta: @@ -101,11 +105,14 @@ class TenantFilterForm(BootstrapMixin, CustomFieldFilterForm): label='Search' ) group = FilterChoiceField( - queryset=TenantGroup.objects.annotate( - filter_count=Count('tenants') - ), + queryset=TenantGroup.objects.all(), to_field_name='slug', - null_label='-- None --' + null_label='-- None --', + widget=APISelectMultiple( + api_url="/api/tenancy/tenant-groups/", + value_field="slug", + null_option=True, + ) )