From 43fadab3bbb770d4914e159690cbcc66f24a890f Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 29 Dec 2021 11:57:27 -0500 Subject: [PATCH] Closes #8034: Enable specifying custom field validators during CSV import --- docs/release-notes/version-3.1.md | 1 + netbox/extras/forms/bulk_import.py | 9 +++++++-- netbox/extras/tests/test_views.py | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index da9346207..e3e13ca4f 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -6,6 +6,7 @@ * [#6782](https://github.com/netbox-community/netbox/issues/6782) - Enable the inclusion of custom links in tables * [#7600](https://github.com/netbox-community/netbox/issues/7600) - Include count of available IPs on prefix view +* [#8034](https://github.com/netbox-community/netbox/issues/8034) - Enable specifying custom field validators during CSV import * [#8100](https://github.com/netbox-community/netbox/issues/8100) - Add "other" choice for FHRP group protocol * [#8175](https://github.com/netbox-community/netbox/issues/8175) - Display parent object when attaching an image diff --git a/netbox/extras/forms/bulk_import.py b/netbox/extras/forms/bulk_import.py index fb8cf53e8..9f44494e0 100644 --- a/netbox/extras/forms/bulk_import.py +++ b/netbox/extras/forms/bulk_import.py @@ -3,9 +3,10 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.postgres.forms import SimpleArrayField from django.utils.safestring import mark_safe +from extras.choices import CustomFieldTypeChoices from extras.models import * from extras.utils import FeatureQuery -from utilities.forms import CSVContentTypeField, CSVModelForm, CSVMultipleContentTypeField, SlugField +from utilities.forms import CSVChoiceField, CSVContentTypeField, CSVModelForm, CSVMultipleContentTypeField, SlugField __all__ = ( 'CustomFieldCSVForm', @@ -22,6 +23,10 @@ class CustomFieldCSVForm(CSVModelForm): limit_choices_to=FeatureQuery('custom_fields'), help_text="One or more assigned object types" ) + type = CSVChoiceField( + choices=CustomFieldTypeChoices, + help_text='Field data type (e.g. text, integer, etc.)' + ) choices = SimpleArrayField( base_field=forms.CharField(), required=False, @@ -32,7 +37,7 @@ class CustomFieldCSVForm(CSVModelForm): model = CustomField fields = ( 'name', 'label', 'type', 'content_types', 'required', 'description', 'weight', 'filter_logic', 'default', - 'choices', 'weight', + 'choices', 'weight', 'validation_minimum', 'validation_maximum', 'validation_regex', ) diff --git a/netbox/extras/tests/test_views.py b/netbox/extras/tests/test_views.py index 9ce324a5c..67abcf543 100644 --- a/netbox/extras/tests/test_views.py +++ b/netbox/extras/tests/test_views.py @@ -39,10 +39,10 @@ class CustomFieldTestCase(ViewTestCases.PrimaryObjectViewTestCase): } cls.csv_data = ( - 'name,label,type,content_types,weight,filter_logic,choices', - 'field4,Field 4,text,dcim.site,100,exact,', - 'field5,Field 5,integer,dcim.site,100,exact,', - 'field6,Field 6,select,dcim.site,100,exact,"A,B,C"', + 'name,label,type,content_types,weight,filter_logic,choices,validation_minimum,validation_maximum,validation_regex', + 'field4,Field 4,text,dcim.site,100,exact,,,,[a-z]{3}', + 'field5,Field 5,integer,dcim.site,100,exact,,1,100,', + 'field6,Field 6,select,dcim.site,100,exact,"A,B,C",,,', ) cls.bulk_edit_data = {