Skip to content

Commit b41c21b

Browse files
authored
Merge pull request #230 from PROCOLLAB-github/dev
Dev
2 parents ad4f2e5 + 00a81aa commit b41c21b

3 files changed

Lines changed: 30 additions & 7 deletions

File tree

projects/managers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44
User = get_user_model()
55

66

7+
class CollaboratorManager(Manager):
8+
def get_draft_projects_for_user(self):
9+
return (
10+
super()
11+
.get_queryset()
12+
.select_related("project")
13+
.filter(project__is_draft=True)
14+
)
15+
16+
717
class ProjectManager(Manager):
818
def get_projects_for_list_view(self):
919
return self.get_queryset().filter(draft=False)

projects/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from files.models import UserFile
1010
from industries.models import Industry
1111
from projects.constants import VERBOSE_STEPS
12-
from projects.managers import AchievementManager, ProjectManager
12+
from projects.managers import AchievementManager, CollaboratorManager, ProjectManager
1313
from users.models import CustomUser
1414

1515
User = get_user_model()
@@ -215,6 +215,8 @@ class Collaborator(models.Model):
215215
verbose_name="Дата изменения", null=False, auto_now=True
216216
)
217217

218+
objects = CollaboratorManager()
219+
218220
class Meta:
219221
verbose_name = "Коллаборатор"
220222
verbose_name_plural = "Коллабораторы"

users/serializers.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,13 @@ class UserDetailSerializer(serializers.ModelSerializer):
8989
is_online = serializers.SerializerMethodField()
9090
projects = serializers.SerializerMethodField()
9191

92-
@classmethod
93-
def get_projects(cls, user: CustomUser):
92+
def get_projects(self, user: CustomUser):
9493
return UserProjectsSerializer(
9594
[
9695
collab.project
97-
for collab in user.collaborations.select_related("project").all()
98-
if not collab.project.draft
96+
for collab in user.collaborations.filter(project__draft=False)
9997
],
98+
context={"request": self.context.get("request")},
10099
many=True,
101100
).data
102101

@@ -213,7 +212,18 @@ def update(self, instance, validated_data):
213212

214213
class UserProjectsSerializer(serializers.ModelSerializer):
215214
short_description = serializers.SerializerMethodField()
216-
views_count = serializers.SerializerMethodField(method_name="get_views_count")
215+
views_count = serializers.SerializerMethodField()
216+
collaborator = serializers.SerializerMethodField(method_name="get_collaborator")
217+
218+
def get_collaborator(self, project: Project):
219+
# TODO: fix me, import in a functon
220+
from projects.serializers import CollaboratorSerializer
221+
222+
user = self.context.get("request").user
223+
224+
return CollaboratorSerializer(
225+
project.collaborator_set.get(user=user), many=False
226+
).data
217227

218228
@classmethod
219229
def get_views_count(cls, project):
@@ -233,8 +243,9 @@ class Meta:
233243
"image_address",
234244
"industry",
235245
"views_count",
246+
"collaborator",
236247
]
237-
read_only_fields = ["leader"]
248+
read_only_fields = ["leader", "collaborator"]
238249

239250

240251
class UserListSerializer(serializers.ModelSerializer):

0 commit comments

Comments
 (0)