From f5d187a311be47786f8a5528d729c6f55eac6aad Mon Sep 17 00:00:00 2001 From: Cody Maffucci <46459665+Maffooch@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:52:01 -0700 Subject: [PATCH 1/3] feat(serializers, filters): add choice fields for business criticality, platform, lifecycle, and origin --- dojo/api_v2/serializers.py | 5 +++++ dojo/filters.py | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dojo/api_v2/serializers.py b/dojo/api_v2/serializers.py index 806a8a1453a..6d811635c7b 100644 --- a/dojo/api_v2/serializers.py +++ b/dojo/api_v2/serializers.py @@ -2103,6 +2103,11 @@ class ProductSerializer(serializers.ModelSerializer): findings_count = serializers.SerializerMethodField() findings_list = serializers.SerializerMethodField() + business_criticality = serializers.ChoiceField(choices=Product.BUSINESS_CRITICALITY_CHOICES, allow_blank=True) + platform = serializers.ChoiceField(choices=Product.PLATFORM_CHOICES, allow_blank=True) + lifecycle = serializers.ChoiceField(choices=Product.LIFECYCLE_CHOICES, allow_blank=True) + origin = serializers.ChoiceField(choices=Product.ORIGIN_CHOICES, allow_blank=True) + tags = TagListSerializerField(required=False) product_meta = ProductMetaSerializer(read_only=True, many=True) diff --git a/dojo/filters.py b/dojo/filters.py index ebd8b023fb8..449b755ef1e 100644 --- a/dojo/filters.py +++ b/dojo/filters.py @@ -1423,10 +1423,10 @@ class ApiProductFilter(DojoFilter): name = CharFilter(lookup_expr="icontains") name_exact = CharFilter(field_name="name", lookup_expr="iexact") description = CharFilter(lookup_expr="icontains") - business_criticality = CharFilter(method=custom_filter, field_name="business_criticality") - platform = CharFilter(method=custom_filter, field_name="platform") - lifecycle = CharFilter(method=custom_filter, field_name="lifecycle") - origin = CharFilter(method=custom_filter, field_name="origin") + business_criticality = MultipleChoiceFilter(choices=Product.BUSINESS_CRITICALITY_CHOICES) + platform = MultipleChoiceFilter(choices=Product.PLATFORM_CHOICES) + lifecycle = MultipleChoiceFilter(choices=Product.LIFECYCLE_CHOICES) + origin = MultipleChoiceFilter(choices=Product.ORIGIN_CHOICES) # NumberInFilter id = NumberInFilter(field_name="id", lookup_expr="in") product_manager = NumberInFilter(field_name="product_manager", lookup_expr="in") From 5048b9d7852bf3c076ff31a5464165117f4d1251 Mon Sep 17 00:00:00 2001 From: Cody Maffucci <46459665+Maffooch@users.noreply.github.com> Date: Thu, 20 Nov 2025 14:27:02 -0700 Subject: [PATCH 2/3] feat(serializers): allow null values for choice fields in ProductSerializer --- dojo/api_v2/serializers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dojo/api_v2/serializers.py b/dojo/api_v2/serializers.py index 6d811635c7b..99085e81cd2 100644 --- a/dojo/api_v2/serializers.py +++ b/dojo/api_v2/serializers.py @@ -2103,10 +2103,10 @@ class ProductSerializer(serializers.ModelSerializer): findings_count = serializers.SerializerMethodField() findings_list = serializers.SerializerMethodField() - business_criticality = serializers.ChoiceField(choices=Product.BUSINESS_CRITICALITY_CHOICES, allow_blank=True) - platform = serializers.ChoiceField(choices=Product.PLATFORM_CHOICES, allow_blank=True) - lifecycle = serializers.ChoiceField(choices=Product.LIFECYCLE_CHOICES, allow_blank=True) - origin = serializers.ChoiceField(choices=Product.ORIGIN_CHOICES, allow_blank=True) + business_criticality = serializers.ChoiceField(choices=Product.BUSINESS_CRITICALITY_CHOICES, allow_blank=True, allow_null=True) + platform = serializers.ChoiceField(choices=Product.PLATFORM_CHOICES, allow_blank=True, allow_null=True) + lifecycle = serializers.ChoiceField(choices=Product.LIFECYCLE_CHOICES, allow_blank=True, allow_null=True) + origin = serializers.ChoiceField(choices=Product.ORIGIN_CHOICES, allow_blank=True, allow_null=True) tags = TagListSerializerField(required=False) product_meta = ProductMetaSerializer(read_only=True, many=True) From 54d220c284b3cb38ea0efd68d638931f22d4853f Mon Sep 17 00:00:00 2001 From: Cody Maffucci <46459665+Maffooch@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:03:33 -0700 Subject: [PATCH 3/3] feat(serializers): make choice fields optional in ProductSerializer --- dojo/api_v2/serializers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dojo/api_v2/serializers.py b/dojo/api_v2/serializers.py index 99085e81cd2..7acd0eac1ab 100644 --- a/dojo/api_v2/serializers.py +++ b/dojo/api_v2/serializers.py @@ -2103,10 +2103,10 @@ class ProductSerializer(serializers.ModelSerializer): findings_count = serializers.SerializerMethodField() findings_list = serializers.SerializerMethodField() - business_criticality = serializers.ChoiceField(choices=Product.BUSINESS_CRITICALITY_CHOICES, allow_blank=True, allow_null=True) - platform = serializers.ChoiceField(choices=Product.PLATFORM_CHOICES, allow_blank=True, allow_null=True) - lifecycle = serializers.ChoiceField(choices=Product.LIFECYCLE_CHOICES, allow_blank=True, allow_null=True) - origin = serializers.ChoiceField(choices=Product.ORIGIN_CHOICES, allow_blank=True, allow_null=True) + business_criticality = serializers.ChoiceField(choices=Product.BUSINESS_CRITICALITY_CHOICES, allow_blank=True, allow_null=True, required=False) + platform = serializers.ChoiceField(choices=Product.PLATFORM_CHOICES, allow_blank=True, allow_null=True, required=False) + lifecycle = serializers.ChoiceField(choices=Product.LIFECYCLE_CHOICES, allow_blank=True, allow_null=True, required=False) + origin = serializers.ChoiceField(choices=Product.ORIGIN_CHOICES, allow_blank=True, allow_null=True, required=False) tags = TagListSerializerField(required=False) product_meta = ProductMetaSerializer(read_only=True, many=True)