@@ -532,23 +532,68 @@ class FindingTagFilter(DojoFilter):
532532 field_name = "tags__name" ,
533533 to_field_name = "name" ,
534534 queryset = Finding .tags .tag_model .objects .all ().order_by ("name" ),
535- help_text = "Filter Findings by the selected tags" )
535+ help_text = "Filter Findings by the selected tags (OR logic)" ,
536+ )
537+
538+ tags_and = ModelMultipleChoiceFilter (
539+ field_name = "tags__name" ,
540+ to_field_name = "name" ,
541+ queryset = Finding .tags .tag_model .objects .all ().order_by ("name" ),
542+ help_text = "Filter Findings by the selected tags (AND logic)" ,
543+ label = "Tags (AND)" ,
544+ conjoined = True ,
545+ )
546+
536547 test__tags = ModelMultipleChoiceFilter (
537548 field_name = "test__tags__name" ,
538549 to_field_name = "name" ,
539550 queryset = Test .tags .tag_model .objects .all ().order_by ("name" ),
540- help_text = "Filter Tests by the selected tags" )
551+ help_text = "Filter Findings by the selected Test tags (OR logic)" ,
552+ label = "Test Tags" ,
553+ )
554+
555+ test__tags_and = ModelMultipleChoiceFilter (
556+ field_name = "test__tags__name" ,
557+ to_field_name = "name" ,
558+ queryset = Test .tags .tag_model .objects .all ().order_by ("name" ),
559+ help_text = "Filter Findings by the selected Test tags (AND logic)" ,
560+ label = "Test Tags (AND)" ,
561+ conjoined = True ,
562+ )
563+
541564 test__engagement__tags = ModelMultipleChoiceFilter (
542565 field_name = "test__engagement__tags__name" ,
543566 to_field_name = "name" ,
544567 queryset = Engagement .tags .tag_model .objects .all ().order_by ("name" ),
545- help_text = "Filter Engagements by the selected tags" )
568+ help_text = "Filter Findings by the selected Engagement tags (OR logic)" ,
569+ label = "Engagement Tags" ,
570+ )
571+
572+ test__engagement__tags_and = ModelMultipleChoiceFilter (
573+ field_name = "test__engagement__tags__name" ,
574+ to_field_name = "name" ,
575+ queryset = Engagement .tags .tag_model .objects .all ().order_by ("name" ),
576+ help_text = "Filter Findings by the selected Engagement tags (AND logic)" ,
577+ label = "Engagement Tags (AND)" ,
578+ conjoined = True ,
579+ )
580+
546581 test__engagement__product__tags = ModelMultipleChoiceFilter (
547582 field_name = "test__engagement__product__tags__name" ,
548583 to_field_name = "name" ,
549584 queryset = Product .tags .tag_model .objects .all ().order_by ("name" ),
550- label = labels .ASSET_FILTERS_TAGS_FILTER_LABEL ,
551- help_text = labels .ASSET_FILTERS_TAGS_FILTER_HELP )
585+ help_text = "Filter Findings by the selected Product tags (OR logic)" ,
586+ label = "Product Tags" ,
587+ )
588+
589+ test__engagement__product__tags_and = ModelMultipleChoiceFilter (
590+ field_name = "test__engagement__product__tags__name" ,
591+ to_field_name = "name" ,
592+ queryset = Product .tags .tag_model .objects .all ().order_by ("name" ),
593+ help_text = "Filter Findings by the selected Product tags (AND logic)" ,
594+ label = "Product Tags (AND)" ,
595+ conjoined = True ,
596+ )
552597
553598 not_tags = ModelMultipleChoiceFilter (
554599 field_name = "tags__name" ,
0 commit comments