1515 UUIDField ,
1616 Value ,
1717 Subquery ,
18+ Count ,
1819)
1920from django .db .models .functions import Coalesce
2021from django .utils import timezone
@@ -453,10 +454,12 @@ def retrieve(self, request, slug, project_id, pk=None):
453454 project = Project .objects .get (pk = project_id , workspace__slug = slug )
454455
455456 issue = (
456- Issue .objects .filter (project_id = self .kwargs .get ("project_id" ))
457- .filter (workspace__slug = self .kwargs .get ("slug" ))
458- .select_related ("workspace" , "project" , "state" , "parent" )
459- .prefetch_related ("assignees" , "labels" , "issue_module__module" )
457+ Issue .objects .filter (
458+ project_id = self .kwargs .get ("project_id" ),
459+ workspace__slug = self .kwargs .get ("slug" ),
460+ pk = pk ,
461+ )
462+ .select_related ("state" )
460463 .annotate (
461464 cycle_id = Subquery (
462465 CycleIssue .objects .filter (issue = OuterRef ("id" )).values ("cycle_id" )[
@@ -465,60 +468,63 @@ def retrieve(self, request, slug, project_id, pk=None):
465468 )
466469 )
467470 .annotate (
468- link_count = IssueLink .objects .filter (issue = OuterRef ("id" ))
469- .order_by ()
470- .annotate (count = Func (F ("id" ), function = "Count" ))
471- .values ("count" )
471+ link_count = Subquery (
472+ IssueLink .objects .filter (issue = OuterRef ("id" ))
473+ .values ("issue" )
474+ .annotate (count = Count ("id" ))
475+ .values ("count" )
476+ )
472477 )
473478 .annotate (
474- attachment_count = FileAsset .objects .filter (
475- issue_id = OuterRef ("id" ),
476- entity_type = FileAsset .EntityTypeContext .ISSUE_ATTACHMENT ,
479+ attachment_count = Subquery (
480+ FileAsset .objects .filter (
481+ issue_id = OuterRef ("id" ),
482+ entity_type = FileAsset .EntityTypeContext .ISSUE_ATTACHMENT ,
483+ )
484+ .values ("issue_id" )
485+ .annotate (count = Count ("id" ))
486+ .values ("count" )
477487 )
478- .order_by ()
479- .annotate (count = Func (F ("id" ), function = "Count" ))
480- .values ("count" )
481488 )
482489 .annotate (
483- sub_issues_count = Issue .issue_objects .filter (parent = OuterRef ("id" ))
484- .order_by ()
485- .annotate (count = Func (F ("id" ), function = "Count" ))
486- .values ("count" )
490+ sub_issues_count = Subquery (
491+ Issue .issue_objects .filter (parent = OuterRef ("id" ))
492+ .values ("parent" )
493+ .annotate (count = Count ("id" ))
494+ .values ("count" )
495+ )
487496 )
488- .filter (pk = pk )
489497 .annotate (
490498 label_ids = Coalesce (
491- ArrayAgg (
492- "labels__id" ,
493- distinct = True ,
494- filter = Q (
495- ~ Q (labels__id__isnull = True )
496- & Q (label_issue__deleted_at__isnull = True )
497- ),
499+ Subquery (
500+ IssueLabel .objects .filter (issue_id = OuterRef ("pk" ))
501+ .values ("issue_id" )
502+ .annotate (arr = ArrayAgg ("label_id" , distinct = True ))
503+ .values ("arr" )
498504 ),
499505 Value ([], output_field = ArrayField (UUIDField ())),
500506 ),
501507 assignee_ids = Coalesce (
502- ArrayAgg (
503- "assignees__id" ,
504- distinct = True ,
505- filter = Q (
506- ~ Q ( assignees__id__isnull = True )
507- & Q ( assignees__member_project__is_active = True )
508- & Q ( issue_assignee__deleted_at__isnull = True )
509- ),
508+ Subquery (
509+ IssueAssignee . objects . filter (
510+ issue_id = OuterRef ( "pk" ) ,
511+ assignee__member_project__is_active = True ,
512+ )
513+ . values ( "issue_id" )
514+ . annotate ( arr = ArrayAgg ( "assignee_id" , distinct = True ) )
515+ . values ( "arr" )
510516 ),
511517 Value ([], output_field = ArrayField (UUIDField ())),
512518 ),
513519 module_ids = Coalesce (
514- ArrayAgg (
515- "issue_module__module_id" ,
516- distinct = True ,
517- filter = Q (
518- ~ Q ( issue_module__module_id__isnull = True )
519- & Q ( issue_module__module__archived_at__isnull = True )
520- & Q ( issue_module__deleted_at__isnull = True )
521- ),
520+ Subquery (
521+ ModuleIssue . objects . filter (
522+ issue_id = OuterRef ( "pk" ) ,
523+ module__archived_at__isnull = True ,
524+ )
525+ . values ( "issue_id" )
526+ . annotate ( arr = ArrayAgg ( "module_id" , distinct = True ) )
527+ . values ( "arr" )
522528 ),
523529 Value ([], output_field = ArrayField (UUIDField ())),
524530 ),
@@ -786,37 +792,42 @@ def get_queryset(self):
786792 )
787793
788794 return (
789- issue_queryset .select_related ("workspace" , "project" , "state" , "parent" )
790- .prefetch_related ("assignees" , "labels" , "issue_module__module" )
795+ issue_queryset .select_related ("state" )
791796 .annotate (
792797 cycle_id = Subquery (
793- CycleIssue .objects .filter (
794- issue = OuterRef ( "id" ), deleted_at__isnull = True
795- ). values ( "cycle_id" )[: 1 ]
798+ CycleIssue .objects .filter (issue = OuterRef ( "id" )). values ( "cycle_id" )[
799+ : 1
800+ ]
796801 )
797802 )
798803 .annotate (
799- link_count = IssueLink .objects .filter (issue = OuterRef ("id" ))
800- .order_by ()
801- .annotate (count = Func (F ("id" ), function = "Count" ))
802- .values ("count" )
804+ link_count = Subquery (
805+ IssueLink .objects .filter (issue = OuterRef ("id" ))
806+ .values ("issue" )
807+ .annotate (count = Count ("id" ))
808+ .values ("count" )
809+ )
803810 )
804811 .annotate (
805- attachment_count = FileAsset .objects .filter (
806- issue_id = OuterRef ("id" ),
807- entity_type = FileAsset .EntityTypeContext .ISSUE_ATTACHMENT ,
812+ attachment_count = Subquery (
813+ FileAsset .objects .filter (
814+ issue_id = OuterRef ("id" ),
815+ entity_type = FileAsset .EntityTypeContext .ISSUE_ATTACHMENT ,
816+ )
817+ .values ("issue_id" )
818+ .annotate (count = Count ("id" ))
819+ .values ("count" )
808820 )
809- .order_by ()
810- .annotate (count = Func (F ("id" ), function = "Count" ))
811- .values ("count" )
812821 )
813822 .annotate (
814- sub_issues_count = Issue .issue_objects .filter (parent = OuterRef ("id" ))
815- .order_by ()
816- .annotate (count = Func (F ("id" ), function = "Count" ))
817- .values ("count" )
823+ sub_issues_count = Subquery (
824+ Issue .issue_objects .filter (parent = OuterRef ("id" ))
825+ .values ("parent" )
826+ .annotate (count = Count ("id" ))
827+ .values ("count" )
828+ )
818829 )
819- ). distinct ()
830+ )
820831
821832 def process_paginated_result (self , fields , results , timezone ):
822833 paginated_data = results .values (* fields )
@@ -896,37 +907,35 @@ def list(self, request, slug, project_id):
896907
897908 queryset = queryset .annotate (
898909 label_ids = Coalesce (
899- ArrayAgg (
900- "labels__id" ,
901- distinct = True ,
902- filter = Q (
903- ~ Q (labels__id__isnull = True )
904- & Q (label_issue__deleted_at__isnull = True )
905- ),
910+ Subquery (
911+ IssueLabel .objects .filter (issue_id = OuterRef ("pk" ))
912+ .values ("issue_id" )
913+ .annotate (arr = ArrayAgg ("label_id" , distinct = True ))
914+ .values ("arr" )
906915 ),
907916 Value ([], output_field = ArrayField (UUIDField ())),
908917 ),
909918 assignee_ids = Coalesce (
910- ArrayAgg (
911- "assignees__id" ,
912- distinct = True ,
913- filter = Q (
914- ~ Q ( assignees__id__isnull = True )
915- & Q ( assignees__member_project__is_active = True )
916- & Q ( issue_assignee__deleted_at__isnull = True )
917- ),
919+ Subquery (
920+ IssueAssignee . objects . filter (
921+ issue_id = OuterRef ( "pk" ) ,
922+ assignee__member_project__is_active = True ,
923+ )
924+ . values ( "issue_id" )
925+ . annotate ( arr = ArrayAgg ( "assignee_id" , distinct = True ) )
926+ . values ( "arr" )
918927 ),
919928 Value ([], output_field = ArrayField (UUIDField ())),
920929 ),
921930 module_ids = Coalesce (
922- ArrayAgg (
923- "issue_module__module_id" ,
924- distinct = True ,
925- filter = Q (
926- ~ Q ( issue_module__module_id__isnull = True )
927- & Q ( issue_module__module__archived_at__isnull = True )
928- & Q ( issue_module__deleted_at__isnull = True )
929- ),
931+ Subquery (
932+ ModuleIssue . objects . filter (
933+ issue_id = OuterRef ( "pk" ) ,
934+ module__archived_at__isnull = True ,
935+ )
936+ . values ( "issue_id" )
937+ . annotate ( arr = ArrayAgg ( "module_id" , distinct = True ) )
938+ . values ( "arr" )
930939 ),
931940 Value ([], output_field = ArrayField (UUIDField ())),
932941 ),
0 commit comments