From cbcb81f3d7f5449a135356e77f448e1efcd3cf1b Mon Sep 17 00:00:00 2001 From: Joe Rogers <1337joe@users.noreply.github.com> Date: Mon, 12 Oct 2026 18:08:07 -0400 Subject: [PATCH] Add missing schema nullable tags (#12986) * Synchronize detail field nullable state with model user fields * Make me-user roles field nullable/non-required * Make client-secret nullable * Update api version --------- Co-authored-by: Matthias Mair --- src/backend/InvenTree/InvenTree/api_version.py | 5 ++++- src/backend/InvenTree/common/serializers.py | 1 + src/backend/InvenTree/users/serializers.py | 10 +++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 7f83a19e2e..db9e7442b2 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,14 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 553 +INVENTREE_API_VERSION = 554 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v554 -> 2026-10-09 : https://github.com/inventree/InvenTree/pull/12986 + - Add missing nullable annotations for read_only fields + v553 -> 2026-10-04 : https://github.com/inventree/InvenTree/pull/12965 - Fix user creation with 'group_ids' via the User API endpoint diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 606e4d579e..34ddbe9ff5 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -1323,6 +1323,7 @@ class OAuth2ApplicationSerializer(serializers.ModelSerializer): 'is_builtin', ] read_only_fields = ['id', 'client_id', 'client_secret', 'is_builtin'] + extra_kwargs = {'client_secret': {'allow_null': True}} is_builtin = serializers.SerializerMethodField() diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index 91da686115..a297b7b8c4 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -268,8 +268,12 @@ class ApiTokenSerializer(InvenTreeModelSerializer): return super().validate(data) user_detail = UserSerializer(source='user', read_only=True) - revoked_by_detail = UserSerializer(source='revoked_by', read_only=True) - issued_by_detail = UserSerializer(source='issued_by', read_only=True) + revoked_by_detail = UserSerializer( + source='revoked_by', read_only=True, allow_null=True + ) + issued_by_detail = UserSerializer( + source='issued_by', read_only=True, allow_null=True + ) class GroupSerializer(FilterableSerializerMixin, InvenTreeModelSerializer): @@ -444,7 +448,7 @@ class MeUserSerializer(FilterableSerializerMixin, ExtendedUserSerializer): # they were previously served as a single '/user/me/roles/' response. roles = OptionalField( serializer_class=serializers.SerializerMethodField, - serializer_kwargs={'read_only': True}, + serializer_kwargs={'allow_null': True, 'read_only': True}, filter_name='roles', )