Fixes #2622: Enable filtering cables by multiple types/colors

This commit is contained in:
Jeremy Stretch 2018-11-28 14:22:55 -05:00
parent 5acd429c55
commit 08b4b24296
5 changed files with 39 additions and 36 deletions

View File

@ -37,6 +37,7 @@ NetBox now supports modeling physical cables for console, power, and interface c
## Changes From v2.5-beta2 ## Changes From v2.5-beta2
* [#2622](https://github.com/digitalocean/netbox/issues/2622) - Enable filtering cables by multiple types/colors
* [#2624](https://github.com/digitalocean/netbox/issues/2624) - Delete associated content type and permissions when removing InterfaceConnection model * [#2624](https://github.com/digitalocean/netbox/issues/2624) - Delete associated content type and permissions when removing InterfaceConnection model
## API Changes ## API Changes

View File

@ -7,6 +7,7 @@ from netaddr.core import AddrFormatError
from extras.filters import CustomFieldFilterSet from extras.filters import CustomFieldFilterSet
from tenancy.models import Tenant from tenancy.models import Tenant
from utilities.constants import COLOR_CHOICES
from utilities.filters import NullableCharFieldFilter, NumericInFilter, TagFilter from utilities.filters import NullableCharFieldFilter, NumericInFilter, TagFilter
from virtualization.models import Cluster from virtualization.models import Cluster
from .constants import * from .constants import *
@ -929,6 +930,12 @@ class CableFilter(django_filters.FilterSet):
method='search', method='search',
label='Search', label='Search',
) )
type = django_filters.MultipleChoiceFilter(
choices=CABLE_TYPE_CHOICES
)
color = django_filters.MultipleChoiceFilter(
choices=COLOR_CHOICES
)
class Meta: class Meta:
model = Cable model = Cable

View File

@ -2501,9 +2501,10 @@ class CableFilterForm(BootstrapMixin, forms.Form):
annotate_field='type', annotate_field='type',
required=False required=False
) )
color = forms.ChoiceField( color = AnnotatedMultipleChoiceField(
choices=add_blank_choice(COLOR_CHOICES), choices=COLOR_CHOICES,
widget=ColorSelect(), annotate=Cable.objects.all(),
annotate_field='color',
required=False required=False
) )

View File

@ -1,7 +1,26 @@
from utilities.forms import ChainedModelMultipleChoiceField COLOR_CHOICES = (
('aa1409', 'Dark red'),
('f44336', 'Red'),
# Fields which are used on ManyToMany relationships ('e91e63', 'Pink'),
M2M_FIELD_TYPES = [ ('ff66ff', 'Fuschia'),
ChainedModelMultipleChoiceField, ('9c27b0', 'Purple'),
] ('673ab7', 'Dark purple'),
('3f51b5', 'Indigo'),
('2196f3', 'Blue'),
('03a9f4', 'Light blue'),
('00bcd4', 'Cyan'),
('009688', 'Teal'),
('2f6a31', 'Dark green'),
('4caf50', 'Green'),
('8bc34a', 'Light green'),
('cddc39', 'Lime'),
('ffeb3b', 'Yellow'),
('ffc107', 'Amber'),
('ff9800', 'Orange'),
('ff5722', 'Dark orange'),
('795548', 'Brown'),
('c0c0c0', 'Light grey'),
('9e9e9e', 'Grey'),
('607d8b', 'Dark grey'),
('111111', 'Black'),
)

View File

@ -10,34 +10,9 @@ from django.db.models import Count
from django.urls import reverse_lazy from django.urls import reverse_lazy
from mptt.forms import TreeNodeMultipleChoiceField from mptt.forms import TreeNodeMultipleChoiceField
from .constants import *
from .validators import EnhancedURLValidator from .validators import EnhancedURLValidator
COLOR_CHOICES = (
('aa1409', 'Dark red'),
('f44336', 'Red'),
('e91e63', 'Pink'),
('ff66ff', 'Fuschia'),
('9c27b0', 'Purple'),
('673ab7', 'Dark purple'),
('3f51b5', 'Indigo'),
('2196f3', 'Blue'),
('03a9f4', 'Light blue'),
('00bcd4', 'Cyan'),
('009688', 'Teal'),
('2f6a31', 'Dark green'),
('4caf50', 'Green'),
('8bc34a', 'Light green'),
('cddc39', 'Lime'),
('ffeb3b', 'Yellow'),
('ffc107', 'Amber'),
('ff9800', 'Orange'),
('ff5722', 'Dark orange'),
('795548', 'Brown'),
('c0c0c0', 'Light grey'),
('9e9e9e', 'Grey'),
('607d8b', 'Dark grey'),
('111111', 'Black'),
)
NUMERIC_EXPANSION_PATTERN = r'\[((?:\d+[?:,-])+\d+)\]' NUMERIC_EXPANSION_PATTERN = r'\[((?:\d+[?:,-])+\d+)\]'
ALPHANUMERIC_EXPANSION_PATTERN = r'\[((?:[a-zA-Z0-9]+[?:,-])+[a-zA-Z0-9]+)\]' ALPHANUMERIC_EXPANSION_PATTERN = r'\[((?:[a-zA-Z0-9]+[?:,-])+[a-zA-Z0-9]+)\]'
IP4_EXPANSION_PATTERN = r'\[((?:[0-9]{1,3}[?:,-])+[0-9]{1,3})\]' IP4_EXPANSION_PATTERN = r'\[((?:[0-9]{1,3}[?:,-])+[0-9]{1,3})\]'