Add missing form fields & table columns for validation attributes

This commit is contained in:
Jeremy Stretch 2024-06-19 12:24:34 -04:00
parent 7391a471b0
commit 837d402f1d
3 changed files with 46 additions and 2 deletions

View File

@ -6,6 +6,7 @@ from extras.models import *
from netbox.forms import NetBoxModelBulkEditForm from netbox.forms import NetBoxModelBulkEditForm
from utilities.forms import BulkEditForm, add_blank_choice from utilities.forms import BulkEditForm, add_blank_choice
from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import BulkEditNullBooleanSelect from utilities.forms.widgets import BulkEditNullBooleanSelect
__all__ = ( __all__ = (
@ -64,6 +65,18 @@ class CustomFieldBulkEditForm(BulkEditForm):
required=False, required=False,
widget=BulkEditNullBooleanSelect() widget=BulkEditNullBooleanSelect()
) )
validation_minimum = forms.IntegerField(
label=_('Minimum value'),
required=False,
)
validation_maximum = forms.IntegerField(
label=_('Maximum value'),
required=False,
)
validation_regex = forms.CharField(
label=_('Validation regex'),
required=False
)
validation_unique = forms.NullBooleanField( validation_unique = forms.NullBooleanField(
label=_('Must be unique'), label=_('Must be unique'),
required=False, required=False,
@ -71,6 +84,13 @@ class CustomFieldBulkEditForm(BulkEditForm):
) )
comments = CommentField() comments = CommentField()
fieldsets = (
FieldSet('group_name', 'description', 'weight', 'choice_set', name=_('Attributes')),
FieldSet('ui_visible', 'ui_editable', 'is_cloneable', name=_('Behavior')),
FieldSet(
'validation_minimum', 'validation_maximum', 'validation_regex', 'validation_unique', name=_('Validation')
),
)
nullable_fields = ('group_name', 'description', 'choice_set') nullable_fields = ('group_name', 'description', 'choice_set')

View File

@ -41,7 +41,9 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
'type', 'related_object_type_id', 'group_name', 'weight', 'required', 'choice_set_id', 'ui_visible', 'type', 'related_object_type_id', 'group_name', 'weight', 'required', 'choice_set_id', 'ui_visible',
'ui_editable', 'is_cloneable', name=_('Attributes') 'ui_editable', 'is_cloneable', name=_('Attributes')
), ),
FieldSet('validation_unique', name=_('Validation')), FieldSet(
'validation_minimum', 'validation_maximum', 'validation_regex', 'validation_unique', name=_('Validation')
),
) )
related_object_type_id = ContentTypeMultipleChoiceField( related_object_type_id = ContentTypeMultipleChoiceField(
queryset=ObjectType.objects.with_feature('custom_fields'), queryset=ObjectType.objects.with_feature('custom_fields'),
@ -90,6 +92,18 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
choices=BOOLEAN_WITH_BLANK_CHOICES choices=BOOLEAN_WITH_BLANK_CHOICES
) )
) )
validation_minimum = forms.IntegerField(
label=_('Minimum value'),
required=False
)
validation_maximum = forms.IntegerField(
label=_('Maximum value'),
required=False
)
validation_regex = forms.CharField(
label=_('Validation regex'),
required=False
)
validation_unique = forms.NullBooleanField( validation_unique = forms.NullBooleanField(
label=_('Must be unique'), label=_('Must be unique'),
required=False, required=False,

View File

@ -71,6 +71,15 @@ class CustomFieldTable(NetBoxTable):
is_cloneable = columns.BooleanColumn( is_cloneable = columns.BooleanColumn(
verbose_name=_('Is Cloneable'), verbose_name=_('Is Cloneable'),
) )
validation_minimum = tables.Column(
verbose_name=_('Minimum Value'),
)
validation_maximum = tables.Column(
verbose_name=_('Maximum Value'),
)
validation_regex = tables.Column(
verbose_name=_('Validation Regex'),
)
validation_unique = columns.BooleanColumn( validation_unique = columns.BooleanColumn(
verbose_name=_('Validate Uniqueness'), verbose_name=_('Validate Uniqueness'),
) )
@ -80,7 +89,8 @@ class CustomFieldTable(NetBoxTable):
fields = ( fields = (
'pk', 'id', 'name', 'object_types', 'label', 'type', 'related_object_type', 'group_name', 'required', 'pk', 'id', 'name', 'object_types', 'label', 'type', 'related_object_type', 'group_name', 'required',
'default', 'description', 'search_weight', 'filter_logic', 'ui_visible', 'ui_editable', 'is_cloneable', 'default', 'description', 'search_weight', 'filter_logic', 'ui_visible', 'ui_editable', 'is_cloneable',
'weight', 'choice_set', 'choices', 'validation_unique', 'comments', 'created', 'last_updated', 'weight', 'choice_set', 'choices', 'validation_minimum', 'validation_maximum', 'validation_regex',
'validation_unique', 'comments', 'created', 'last_updated',
) )
default_columns = ('pk', 'name', 'object_types', 'label', 'group_name', 'type', 'required', 'description') default_columns = ('pk', 'name', 'object_types', 'label', 'group_name', 'type', 'required', 'description')