mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 09:28:38 -06:00
12468 disallow double underscores in custom field names (#12523)
* 12468 disallow double underscores in custom field names * 12468 disallow double underscores in custom field names * 12468 review changes * 12468 correct migration * 12468 use inverse match * 12468 use inverse match * Add test for invalid custom field names --------- Co-authored-by: jeremystretch <jstretch@netboxlabs.com>
This commit is contained in:
parent
39fd64b2ef
commit
21f4761335
@ -13,6 +13,22 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customfield',
|
model_name='customfield',
|
||||||
name='name',
|
name='name',
|
||||||
field=models.CharField(max_length=50, unique=True, validators=[django.core.validators.RegexValidator(flags=re.RegexFlag['IGNORECASE'], message='Only alphanumeric characters and underscores are allowed.', regex='^[a-z0-9_]+$')]),
|
field=models.CharField(
|
||||||
|
max_length=50,
|
||||||
|
unique=True,
|
||||||
|
validators=[
|
||||||
|
django.core.validators.RegexValidator(
|
||||||
|
flags=re.RegexFlag['IGNORECASE'],
|
||||||
|
message='Only alphanumeric characters and underscores are allowed.',
|
||||||
|
regex='^[a-z0-9_]+$',
|
||||||
|
),
|
||||||
|
django.core.validators.RegexValidator(
|
||||||
|
flags=re.RegexFlag['IGNORECASE'],
|
||||||
|
inverse_match=True,
|
||||||
|
message='Double underscores are not permitted in custom field names.',
|
||||||
|
regex=r'__',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
@ -85,6 +85,12 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
|
|||||||
message="Only alphanumeric characters and underscores are allowed.",
|
message="Only alphanumeric characters and underscores are allowed.",
|
||||||
flags=re.IGNORECASE
|
flags=re.IGNORECASE
|
||||||
),
|
),
|
||||||
|
RegexValidator(
|
||||||
|
regex=r'__',
|
||||||
|
message="Double underscores are not permitted in custom field names.",
|
||||||
|
flags=re.IGNORECASE,
|
||||||
|
inverse_match=True
|
||||||
|
),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
label = models.CharField(
|
label = models.CharField(
|
||||||
|
@ -29,6 +29,17 @@ class CustomFieldTest(TestCase):
|
|||||||
|
|
||||||
cls.object_type = ContentType.objects.get_for_model(Site)
|
cls.object_type = ContentType.objects.get_for_model(Site)
|
||||||
|
|
||||||
|
def test_invalid_name(self):
|
||||||
|
"""
|
||||||
|
Try creating a CustomField with an invalid name.
|
||||||
|
"""
|
||||||
|
with self.assertRaises(ValidationError):
|
||||||
|
# Invalid character
|
||||||
|
CustomField(name='?', type=CustomFieldTypeChoices.TYPE_TEXT).full_clean()
|
||||||
|
with self.assertRaises(ValidationError):
|
||||||
|
# Double underscores not permitted
|
||||||
|
CustomField(name='foo__bar', type=CustomFieldTypeChoices.TYPE_TEXT).full_clean()
|
||||||
|
|
||||||
def test_text_field(self):
|
def test_text_field(self):
|
||||||
value = 'Foobar!'
|
value = 'Foobar!'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user