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

Introduce ColorField for consistent represention of color choice fields in forms

This commit is contained in:
jeremystretch
2021-06-09 17:17:39 -04:00
parent b3ed545d6a
commit a1ba3b567c
3 changed files with 34 additions and 50 deletions

View File

@ -23,7 +23,7 @@ from tenancy.forms import TenancyFilterForm, TenancyForm
from tenancy.models import Tenant
from utilities.forms import (
APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect,
ColorSelect, CommentField, CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVTypedChoiceField,
ColorField, CommentField, CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVTypedChoiceField,
DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableNameField, form_from_model, JSONField,
NumericArrayField, SelectWithPK, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple, TagFilterField,
BOOLEAN_WITH_BLANK_CHOICES,
@ -610,10 +610,8 @@ class RackRoleBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
queryset=RackRole.objects.all(),
widget=forms.MultipleHiddenInput
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
description = forms.CharField(
max_length=200,
@ -1703,10 +1701,8 @@ class FrontPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
required=False,
widget=StaticSelect2()
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
description = forms.CharField(
required=False
@ -1734,10 +1730,8 @@ class RearPortTemplateCreateForm(ComponentTemplateCreateForm):
choices=PortTypeChoices,
widget=StaticSelect2(),
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
positions = forms.IntegerField(
min_value=REARPORT_POSITIONS_MIN,
@ -1764,10 +1758,8 @@ class RearPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
required=False,
widget=StaticSelect2()
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
description = forms.CharField(
required=False
@ -1958,10 +1950,8 @@ class DeviceRoleBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
queryset=DeviceRole.objects.all(),
widget=forms.MultipleHiddenInput
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
vm_role = forms.NullBooleanField(
required=False,
@ -3454,10 +3444,8 @@ class FrontPortFilterForm(DeviceComponentFilterForm):
required=False,
widget=StaticSelect2Multiple()
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
tag = TagFilterField(model)
@ -3497,10 +3485,8 @@ class FrontPortCreateForm(ComponentCreateForm):
choices=PortTypeChoices,
widget=StaticSelect2(),
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
rear_port_set = forms.MultipleChoiceField(
choices=[],
@ -3646,10 +3632,8 @@ class RearPortFilterForm(DeviceComponentFilterForm):
required=False,
widget=StaticSelect2Multiple()
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
tag = TagFilterField(model)
@ -3677,10 +3661,8 @@ class RearPortCreateForm(ComponentCreateForm):
choices=PortTypeChoices,
widget=StaticSelect2(),
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
positions = forms.IntegerField(
min_value=REARPORT_POSITIONS_MIN,
@ -4411,10 +4393,8 @@ class CableBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditFo
max_length=100,
required=False
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
length = forms.IntegerField(
min_value=1,
@ -4489,10 +4469,8 @@ class CableFilterForm(BootstrapMixin, CustomFieldFilterForm):
choices=add_blank_choice(CableStatusChoices),
widget=StaticSelect2()
)
color = forms.CharField(
max_length=6, # RGB color code
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
device_id = DynamicModelMultipleChoiceField(
queryset=Device.objects.all(),

View File

@ -7,7 +7,7 @@ from django.utils.translation import gettext as _
from dcim.models import DeviceRole, DeviceType, Platform, Region, Site, SiteGroup
from tenancy.models import Tenant, TenantGroup
from utilities.forms import (
add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorSelect,
add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorField,
CommentField, ContentTypeMultipleChoiceField, CSVModelForm, DateTimePicker, DynamicModelMultipleChoiceField,
JSONField, SlugField, StaticSelect2, BOOLEAN_WITH_BLANK_CHOICES,
)
@ -194,10 +194,8 @@ class TagBulkEditForm(BootstrapMixin, BulkEditForm):
queryset=Tag.objects.all(),
widget=forms.MultipleHiddenInput
)
color = forms.CharField(
max_length=6,
required=False,
widget=ColorSelect()
color = ColorField(
required=False
)
description = forms.CharField(
max_length=200,

View File

@ -20,6 +20,7 @@ from .constants import *
from .utils import expand_alphanumeric_pattern, expand_ipaddress_pattern
__all__ = (
'ColorField',
'CommentField',
'ContentTypeChoiceField',
'ContentTypeMultipleChoiceField',
@ -69,6 +70,13 @@ class SlugField(forms.SlugField):
self.widget.attrs['slug-source'] = slug_source
class ColorField(forms.CharField):
"""
A field which represents a color in hexadecimal RRGGBB format.
"""
widget = widgets.ColorSelect
class TagFilterField(forms.MultipleChoiceField):
"""
A filter field for the tags of a model. Only the tags used by a model are displayed.