44from industries .models import Industry
55from projects .models import Project , Achievement , Collaborator
66from projects .validators import validate_project
7+ from users .models import LikesOnProject
78from vacancy .serializers import ProjectVacancyListSerializer
89
910
@@ -65,6 +66,7 @@ class ProjectDetailSerializer(serializers.ModelSerializer):
6566 vacancies = ProjectVacancyListSerializer (many = True , read_only = True )
6667 short_description = serializers .SerializerMethodField ()
6768 industry_id = serializers .IntegerField (required = False )
69+ likes_count = serializers .SerializerMethodField (method_name = "count_likes" )
6870
6971 def validate (self , data ):
7072 super ().validate (data )
@@ -74,6 +76,9 @@ def validate(self, data):
7476 def get_short_description (cls , project ):
7577 return project .get_short_description ()
7678
79+ def count_likes (self , project ):
80+ return LikesOnProject .objects .filter (project = project , is_liked = True ).count ()
81+
7782 def update (self , instance , validated_data ):
7883 instance = super ().update (instance , validated_data )
7984 instance .save ()
@@ -99,12 +104,20 @@ class Meta:
99104 "vacancies" ,
100105 "datetime_created" ,
101106 "datetime_updated" ,
107+ "views_count" ,
108+ "likes_count" ,
109+ ]
110+ read_only_fields = [
111+ "leader" ,
112+ "views_count" ,
113+ "datetime_created" ,
114+ "datetime_updated" ,
102115 ]
103- read_only_fields = ["leader" ]
104116
105117
106118class ProjectListSerializer (serializers .ModelSerializer ):
107119 collaborators = serializers .SerializerMethodField (method_name = "get_collaborators" )
120+ likes_count = serializers .SerializerMethodField (method_name = "count_likes" )
108121 collaborator_count = serializers .SerializerMethodField (
109122 method_name = "get_collaborator_count"
110123 )
@@ -120,6 +133,9 @@ def get_short_description(cls, project):
120133 def get_collaborator_count (cls , obj ):
121134 return len (obj .collaborator_set .all ())
122135
136+ def count_likes (self , obj ):
137+ return LikesOnProject .objects .filter (project = obj , is_liked = True ).count ()
138+
123139 def get_collaborators (self , obj ):
124140 max_collaborator_count = 4
125141 return CollaboratorSerializer (
@@ -142,6 +158,7 @@ class Meta:
142158 "collaborators" ,
143159 "vacancies" ,
144160 "datetime_created" ,
161+ "likes_count" ,
145162 ]
146163
147164 read_only_fields = [
0 commit comments