diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 55a4f0414b..d937a1a416 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,13 +1,16 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 290 +INVENTREE_API_VERSION = 291 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v291 - 2024-11-30 : https://github.com/inventree/InvenTree/pull/8596 + - Allow null / empty values for plugin settings + v290 - 2024-11-29 : https://github.com/inventree/InvenTree/pull/8590 - Adds "quantity" field to ReturnOrderLineItem model and API diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 23c938d9af..aa6240d8d2 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -41,11 +41,19 @@ class SettingsValueField(serializers.Field): Protected settings are returned as '***' """ - return '***' if instance.protected else str(instance.value) + if instance.protected: + return '***' + elif instance.value is None: + return '' + else: + return str(instance.value) def to_internal_value(self, data): """Return the internal value of the setting.""" - return str(data) + if data is None: + return '' + else: + return str(data) class SettingsSerializer(InvenTreeModelSerializer): @@ -65,7 +73,13 @@ class SettingsSerializer(InvenTreeModelSerializer): api_url = serializers.CharField(read_only=True) - value = SettingsValueField() + value = SettingsValueField(allow_null=True) + + def validate_value(self, value): + """Validate the value of the setting.""" + if value is None: + return '' + return str(value) units = serializers.CharField(read_only=True) @@ -185,6 +199,12 @@ class GenericReferencedSettingSerializer(SettingsSerializer): # resume operations super().__init__(*args, **kwargs) + def validate_value(self, value): + """Validate the value of the setting.""" + if value is None: + return '' + return str(value) + class NotificationMessageSerializer(InvenTreeModelSerializer): """Serializer for the InvenTreeUserSetting model.""" diff --git a/src/frontend/src/components/settings/SettingList.tsx b/src/frontend/src/components/settings/SettingList.tsx index 5253539cac..bec4f1097f 100644 --- a/src/frontend/src/components/settings/SettingList.tsx +++ b/src/frontend/src/components/settings/SettingList.tsx @@ -68,6 +68,7 @@ export function SettingList({ fields: { value: { field_type: fieldType, + required: setting?.required ?? false, label: setting?.name, description: setting?.description, api_url: setting?.api_url ?? '',