|
4 | 4 |
|
5 | 5 | from django.contrib.auth import get_user_model |
6 | 6 | from django.db import IntegrityError, transaction |
7 | | -from django.db.models import Prefetch |
| 7 | +from django.db.models import Exists, OuterRef, Prefetch |
8 | 8 | from django.http import FileResponse |
9 | 9 | from django.shortcuts import get_object_or_404 |
10 | 10 | from django.utils import timezone |
@@ -68,19 +68,28 @@ def get_queryset(self): |
68 | 68 | base_qs = super().get_queryset() |
69 | 69 | participating_flag = self.request.query_params.get("participating") |
70 | 70 | if not participating_flag: |
71 | | - return base_qs |
| 71 | + qs = base_qs |
| 72 | + elif not self.request.user.is_authenticated: |
| 73 | + qs = PartnerProgram.objects.none() |
| 74 | + else: |
| 75 | + now = timezone.now() |
| 76 | + qs = ( |
| 77 | + base_qs.filter( |
| 78 | + partner_program_profiles__user=self.request.user, |
| 79 | + datetime_finished__gte=now, |
| 80 | + ) |
| 81 | + .distinct() |
| 82 | + ) |
72 | 83 |
|
73 | | - if not self.request.user.is_authenticated: |
74 | | - return PartnerProgram.objects.none() |
| 84 | + user = self.request.user |
| 85 | + if not user.is_authenticated: |
| 86 | + return qs |
75 | 87 |
|
76 | | - now = timezone.now() |
77 | | - return ( |
78 | | - base_qs.filter( |
79 | | - partner_program_profiles__user=self.request.user, |
80 | | - datetime_finished__gte=now, |
81 | | - ) |
82 | | - .distinct() |
| 88 | + member_qs = PartnerProgramUserProfile.objects.filter( |
| 89 | + partner_program=OuterRef("pk"), |
| 90 | + user=user, |
83 | 91 | ) |
| 92 | + return qs.annotate(is_user_member=Exists(member_qs)) |
84 | 93 |
|
85 | 94 |
|
86 | 95 | class PartnerProgramDetail(generics.RetrieveAPIView): |
@@ -108,8 +117,8 @@ def get(self, request, *args, **kwargs): |
108 | 117 |
|
109 | 118 | class PartnerProgramProjectApplyView(GenericAPIView): |
110 | 119 | """ |
111 | | - Создание проекта сразу в рамках программы (подать проект). |
112 | | - Проект создаётся как черновик и строго непубличный. |
| 120 | + Создание проекта в рамках программы (подать проект). |
| 121 | + Проект создаётся как непубличный черновик. |
113 | 122 | """ |
114 | 123 |
|
115 | 124 | permission_classes = [IsAuthenticated] |
|
0 commit comments