Skip to content

Commit 8e4da53

Browse files
committed
Created route for list of project news
1 parent f784bd3 commit 8e4da53

4 files changed

Lines changed: 50 additions & 3 deletions

File tree

projects/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class ProjectAdmin(admin.ModelAdmin):
1717

1818

1919
@admin.register(ProjectNews)
20-
class ProjectNews(admin.ModelAdmin):
20+
class ProjectNewsAdmin(admin.ModelAdmin):
2121
list_display = (
2222
"id",
2323
"project",

projects/serializers.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
from django.contrib.auth import get_user_model
2+
from django.contrib.contenttypes.models import ContentType
13
from rest_framework import serializers
24

35
from core.fields import CustomListField
46
from industries.models import Industry
5-
from projects.models import Project, Achievement, Collaborator
7+
from projects.models import Project, Achievement, Collaborator, ProjectNews
68
from projects.validators import validate_project
79
from users.models import LikesOnProject
810
from vacancy.serializers import ProjectVacancyListSerializer
911

12+
User = get_user_model()
13+
1014

1115
class AchievementListSerializer(serializers.ModelSerializer):
1216
class Meta:
@@ -204,3 +208,33 @@ class Meta:
204208
"projects",
205209
]
206210
ref_name = "Projects"
211+
212+
213+
class ProjectNewsListSerializer(serializers.ModelSerializer):
214+
likes_count = serializers.SerializerMethodField()
215+
project_name = serializers.SerializerMethodField()
216+
project_image_address = serializers.SerializerMethodField()
217+
218+
def get_project_name(self, obj):
219+
return obj.project.name
220+
221+
def get_project_image_address(self, obj):
222+
return obj.project.image_address
223+
224+
def get_likes_count(self, obj):
225+
obj_type = ContentType.objects.get_for_model(obj)
226+
return User.objects.filter(
227+
likes__content_type=obj_type, likes__object_id=obj.id
228+
).count()
229+
230+
class Meta:
231+
model = ProjectNews
232+
fields = [
233+
"id",
234+
"project_name",
235+
"project_image_address",
236+
"text",
237+
"datetime_created",
238+
"views_count",
239+
"likes_count",
240+
]

projects/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
ProjectVacancyResponses,
1212
ProjectRecommendedUsers,
1313
SetLikeOnProject,
14+
ProjectNewsList,
1415
)
1516

1617
app_name = "projects"
1718

1819
urlpatterns = [
1920
path("", ProjectList.as_view()),
2021
path("<int:pk>/like/", SetLikeOnProject.as_view()),
22+
path("<int:pk>/news/", ProjectNewsList.as_view()),
2123
path("<int:pk>/collaborators/", ProjectCollaborators.as_view()),
2224
path("<int:pk>/", ProjectDetail.as_view()),
2325
path("<int:pk>/recommended_users", ProjectRecommendedUsers.as_view()),

projects/views.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from projects.filters import ProjectFilter
1111
from projects.constants import VERBOSE_STEPS
1212
from projects.helpers import get_recommended_users, check_related_fields_update
13-
from projects.models import Project, Achievement
13+
from projects.models import Project, Achievement, ProjectNews
1414
from projects.permissions import (
1515
IsProjectLeaderOrReadOnlyForNonDrafts,
1616
HasInvolvementInProjectOrReadOnly,
@@ -22,6 +22,7 @@
2222
ProjectListSerializer,
2323
AchievementDetailSerializer,
2424
ProjectCollaboratorSerializer,
25+
ProjectNewsListSerializer,
2526
)
2627
from users.models import LikesOnProject
2728
from users.serializers import UserListSerializer
@@ -223,3 +224,13 @@ def get(self, request, pk):
223224
queryset = self.get_queryset()
224225
serializer = self.get_serializer(queryset, many=True)
225226
return Response(serializer.data)
227+
228+
229+
class ProjectNewsList(generics.ListCreateAPIView):
230+
queryset = ProjectNews.objects.all()
231+
serializer_class = ProjectNewsListSerializer
232+
permission_classes = [IsProjectLeaderOrReadOnlyForNonDrafts]
233+
234+
def perform_create(self, serializer):
235+
project = Project.objects.get(pk=self.kwargs["pk"])
236+
serializer.save(project=project)

0 commit comments

Comments
 (0)