Skip to content

Commit 41a87c0

Browse files
authored
Merge pull request #566 from PROCOLLAB-github/feature/addotinal_fields_for_programm
Расширена информация о программах в проектах
2 parents 566a5ff + 7257869 commit 41a87c0

3 files changed

Lines changed: 50 additions & 9 deletions

File tree

projects/managers.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,18 @@ def get_draft_projects_for_user(self):
1616

1717
class ProjectManager(Manager):
1818
def get_projects_for_list_view(self):
19-
return self.get_queryset().filter(draft=False).prefetch_related("program_links")
19+
return (
20+
self.get_queryset()
21+
.filter(draft=False)
22+
.prefetch_related("program_links__partner_program")
23+
)
2024

2125
def get_user_projects_for_list_view(self):
22-
return self.get_queryset().distinct()
26+
return (
27+
self.get_queryset()
28+
.prefetch_related("program_links__partner_program")
29+
.distinct()
30+
)
2331

2432
def get_projects_for_detail_view(self):
2533
return (

projects/serializers.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ class Meta:
334334
class ProjectListSerializer(serializers.ModelSerializer):
335335
views_count = serializers.SerializerMethodField(method_name="count_views")
336336
short_description = serializers.SerializerMethodField()
337-
partner_program_id = serializers.SerializerMethodField()
337+
partner_program = serializers.SerializerMethodField()
338338

339339
@classmethod
340340
def count_views(cls, project):
@@ -345,12 +345,23 @@ def get_short_description(cls, project):
345345
return project.get_short_description()
346346

347347
@staticmethod
348-
def get_partner_program_id(project):
348+
def _get_program_link(project):
349349
links_cache = getattr(project, "_prefetched_objects_cache", {}).get(
350350
"program_links"
351351
)
352-
link = links_cache[0] if links_cache else project.program_links.first()
353-
return link.partner_program_id if link else None
352+
if links_cache:
353+
return links_cache[0]
354+
return project.program_links.select_related("partner_program").first()
355+
356+
@classmethod
357+
def get_partner_program(cls, project):
358+
link = cls._get_program_link(project)
359+
if link and link.partner_program:
360+
return {
361+
"id": link.partner_program_id,
362+
"name": link.partner_program.name,
363+
}
364+
return None
354365

355366
class Meta:
356367
model = Project
@@ -363,10 +374,15 @@ class Meta:
363374
"industry",
364375
"views_count",
365376
"is_company",
366-
"partner_program_id",
377+
"partner_program",
367378
]
368379

369-
read_only_fields = ["leader", "views_count", "is_company", "partner_program_id"]
380+
read_only_fields = [
381+
"leader",
382+
"views_count",
383+
"is_company",
384+
"partner_program",
385+
]
370386

371387
def is_valid(self, *, raise_exception=False):
372388
return super().is_valid(raise_exception=raise_exception)

users/serializers.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,7 @@ class ResendVerifyEmailSerializer(serializers.Serializer):
940940
class UserProjectListSerializer(serializers.ModelSerializer[Project]):
941941
views_count = serializers.SerializerMethodField(method_name="count_views")
942942
short_description = serializers.SerializerMethodField()
943+
partner_program = serializers.SerializerMethodField()
943944

944945
@classmethod
945946
def count_views(cls, project):
@@ -949,6 +950,21 @@ def count_views(cls, project):
949950
def get_short_description(cls, project):
950951
return project.get_short_description()
951952

953+
@staticmethod
954+
def get_partner_program(project):
955+
links_cache = getattr(project, "_prefetched_objects_cache", {}).get(
956+
"program_links"
957+
)
958+
link = links_cache[0] if links_cache else project.program_links.select_related(
959+
"partner_program"
960+
).first()
961+
if link and link.partner_program:
962+
return {
963+
"id": link.partner_program_id,
964+
"name": link.partner_program.name,
965+
}
966+
return None
967+
952968
class Meta:
953969
model = Project
954970
fields = [
@@ -961,9 +977,10 @@ class Meta:
961977
"views_count",
962978
"draft",
963979
"is_company",
980+
"partner_program",
964981
]
965982

966-
read_only_fields = ["leader", "views_count", "is_company"]
983+
read_only_fields = ["leader", "views_count", "is_company", "partner_program"]
967984

968985
def is_valid(self, *, raise_exception=False):
969986
return super().is_valid(raise_exception=raise_exception)

0 commit comments

Comments
 (0)