From 3d6bf1e0f8d7f1286b07a88f49b4cf70902aaed4 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 10 Nov 2020 10:21:18 -0500 Subject: [PATCH] Clean up CustomField regex validation --- netbox/extras/admin.py | 11 ++++++++++- netbox/extras/models/customfields.py | 6 ++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index e1ffc044a..a0839b78d 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -75,6 +75,14 @@ class CustomFieldForm(forms.ModelForm): class Meta: model = CustomField exclude = [] + widgets = { + 'validation_regex': forms.Textarea( + attrs={ + 'cols': 80, + 'rows': 3, + } + ) + } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -109,7 +117,8 @@ class CustomFieldAdmin(admin.ModelAdmin): 'fields': ('content_types',) }), ('Validation Rules', { - 'fields': ('validation_minimum', 'validation_maximum', 'validation_regex') + 'fields': ('validation_minimum', 'validation_maximum', 'validation_regex'), + 'classes': ('monospace',) }), ('Choices', { 'description': 'A selection field must have two or more choices assigned to it.', diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index 5c403128c..2fce1f6ce 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -70,7 +70,8 @@ class CustomField(models.Model): ) name = models.CharField( max_length=50, - unique=True + unique=True, + help_text='Internal field name' ) label = models.CharField( max_length=50, @@ -120,7 +121,8 @@ class CustomField(models.Model): validators=[validate_regex], max_length=500, verbose_name='Validation regex', - help_text='Regular expression to enforce on text field values' + help_text='Regular expression to enforce on text field values. Use ^ and $ to force matching of entire string. ' + 'For example, ^[A-Z]{3}$ will limit values to exactly three uppercase letters.' ) choices = ArrayField( base_field=models.CharField(max_length=100),