From ada87aafce265ec39a7b14fa475523bdc6e4a81a Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Mon, 24 Jun 2024 13:51:12 -0700 Subject: [PATCH 1/3] 16640 fix JSON custom field save nul --- netbox/netbox/forms/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/netbox/forms/base.py b/netbox/netbox/forms/base.py index d59f61ef9b9..294f8b7fbe8 100644 --- a/netbox/netbox/forms/base.py +++ b/netbox/netbox/forms/base.py @@ -39,7 +39,7 @@ def _get_form_field(self, customfield): form_field = customfield.to_form_field(set_initial=False) initial = self.instance.custom_field_data.get(customfield.name) if customfield.type == CustomFieldTypeChoices.TYPE_JSON: - form_field.initial = json.dumps(initial) + form_field.initial = json.dumps(initial) if initial else '' else: form_field.initial = initial return form_field From 1c380aab98c9cc2c86f0d821bad693efc8b7678a Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Mon, 29 Jul 2024 17:56:07 +0700 Subject: [PATCH 2/3] 16640 explicitly check against None --- netbox/netbox/forms/base.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/forms/base.py b/netbox/netbox/forms/base.py index 294f8b7fbe8..13ffe0834a1 100644 --- a/netbox/netbox/forms/base.py +++ b/netbox/netbox/forms/base.py @@ -39,7 +39,10 @@ def _get_form_field(self, customfield): form_field = customfield.to_form_field(set_initial=False) initial = self.instance.custom_field_data.get(customfield.name) if customfield.type == CustomFieldTypeChoices.TYPE_JSON: - form_field.initial = json.dumps(initial) if initial else '' + if initial is not None: + form_field.initial = json.dumps(initial) + else: + form_field.initial = '' else: form_field.initial = initial return form_field From cb8fdbe40177f26d42bf2af70ef81d28b48a493f Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Mon, 29 Jul 2024 19:17:14 +0700 Subject: [PATCH 3/3] 16640 convert JSON field from str to dict --- netbox/netbox/forms/base.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/netbox/netbox/forms/base.py b/netbox/netbox/forms/base.py index 13ffe0834a1..74ac4b0e005 100644 --- a/netbox/netbox/forms/base.py +++ b/netbox/netbox/forms/base.py @@ -39,10 +39,7 @@ def _get_form_field(self, customfield): form_field = customfield.to_form_field(set_initial=False) initial = self.instance.custom_field_data.get(customfield.name) if customfield.type == CustomFieldTypeChoices.TYPE_JSON: - if initial is not None: - form_field.initial = json.dumps(initial) - else: - form_field.initial = '' + form_field.initial = json.dumps(initial) else: form_field.initial = initial return form_field @@ -63,6 +60,8 @@ def clean(self): if value in self.fields[cf_name].empty_values: self.instance.custom_field_data[key] = None else: + if customfield.type == CustomFieldTypeChoices.TYPE_JSON and type(value) is str: + value = json.loads(value) self.instance.custom_field_data[key] = customfield.serialize(value) return super().clean()