11from django .contrib .contenttypes .models import ContentType
2- from django .db .models import QuerySet
2+ from django .db .models import QuerySet , Q
33from rest_framework .generics import CreateAPIView
44from rest_framework .response import Response
55from rest_framework .views import APIView
1010from news .models import News
1111from .serializers import NewsFeedListSerializer
1212from projects .models import Project
13+ from partner_programs .models import PartnerProgramUserProfile
1314from vacancy .models import Vacancy
1415
1516
@@ -26,12 +27,22 @@ def _get_filter_data(self) -> list[str]:
2627 news_types .append ("customuser" )
2728 return news_types
2829
30+ def _get_excluded_projects_ids (self ) -> list [int ]:
31+ """IDs for exclude projects which in Partner Program."""
32+ excluded_projects = PartnerProgramUserProfile .objects .values_list ("project_id" , flat = True )
33+ return excluded_projects
34+
2935 def get_queryset (self ) -> QuerySet [News ]:
3036 filters = self ._get_filter_data ()
37+ excluded_project_ids : list [int ] = self ._get_excluded_projects_ids ()
38+
3139 queryset = (
3240 News .objects .select_related ("content_type" )
3341 .prefetch_related ("content_object" , "files" )
3442 .filter (content_type__model__in = filters )
43+ .exclude (
44+ Q (content_type__model = "project" ) & Q (object_id__in = excluded_project_ids )
45+ )
3546 .order_by ("-datetime_created" )
3647 )
3748 return queryset
0 commit comments