44from django .contrib .contenttypes .models import ContentType
55
66from django .db .models import (
7+ Q ,
78 Count ,
9+ Value ,
810 QuerySet ,
911 OuterRef ,
1012 Subquery ,
1113 IntegerField ,
1214)
15+ from django .db .models .functions import Coalesce
1316
1417from users .models import CustomUser
1518from news .models import News
@@ -90,18 +93,33 @@ def __prepare_user_data(self, user: CustomUser) -> dict[str, Any]:
9093
9194 def __get_user_queryset (self ) -> QuerySet [CustomUser ]:
9295 user_content_type = ContentType .objects .get_for_model (CustomUser )
93- projects_in_program_subqury = (
96+ projects_in_program_subquery = (
9497 PartnerProgramUserProfile .objects
9598 .filter (user_id = OuterRef ("id" ))
9699 .exclude (project = None )
97- .annotate (count = Count ("id" ))
98- .values ("count" )
100+ .values ("user_id" )
101+ .annotate (total = Count ("id" ))
102+ .values ("total" )
99103 )
100- posts_count_subqury = (
104+ posts_count_subquery = (
101105 News .objects
102106 .filter (content_type = user_content_type , object_id = OuterRef ("id" ))
103- .annotate (count = Count ("id" ))
104- .values ("count" )
107+ .values ("object_id" )
108+ .annotate (total = Count ("id" ))
109+ .values ("total" )
110+ )
111+ likes_count_subquery = (
112+ CustomUser .objects
113+ .filter (likes__user_id = OuterRef ("id" ))
114+ .annotate (total_likes = Count ("likes" ))
115+ .values ("total_likes" )
116+ )
117+
118+ projects_in_program_subquery = (
119+ CustomUser .objects
120+ .filter (partner_program_profiles__user_id = OuterRef ("id" ))
121+ .annotate (total_proj = Count ("id" ))
122+ .values ("total_proj" )
105123 )
106124
107125 users : QuerySet [CustomUser ] = (
@@ -116,11 +134,27 @@ def __get_user_queryset(self) -> QuerySet[CustomUser]:
116134 "partner_program_profiles__partner_program" ,
117135 )
118136 .annotate (
119- likes_count = Count ("likes" ),
120137 projects_count = Count ("leaders_projects" ),
121- program_profiles_count = Count ("partner_program_profiles" ),
122- projects_in_program = Subquery (projects_in_program_subqury , output_field = IntegerField ()),
123- posts_count = Subquery (posts_count_subqury , output_field = IntegerField ()),
138+ likes_count = Coalesce (
139+ Subquery (likes_count_subquery , output_field = IntegerField ()),
140+ Value (0 ),
141+ output_field = IntegerField (),
142+ ),
143+ program_profiles_count = Coalesce (
144+ Subquery (projects_in_program_subquery , output_field = IntegerField ()),
145+ Value (0 ),
146+ output_field = IntegerField (),
147+ ),
148+ projects_in_program = Coalesce (
149+ Subquery (projects_in_program_subquery , output_field = IntegerField ()),
150+ Value (0 ),
151+ output_field = IntegerField (),
152+ ),
153+ posts_count = Coalesce (
154+ Subquery (posts_count_subquery , output_field = IntegerField ()),
155+ Value (0 ),
156+ output_field = IntegerField (),
157+ ),
124158 )
125159 )
126160 return users
0 commit comments