|
| 1 | +from django.contrib.auth import get_user_model |
| 2 | +from django.contrib.contenttypes.models import ContentType |
1 | 3 | from rest_framework import serializers |
2 | 4 |
|
3 | 5 | from core.fields import CustomListField |
4 | 6 | from industries.models import Industry |
5 | | -from projects.models import Project, Achievement, Collaborator |
| 7 | +from projects.models import Project, Achievement, Collaborator, ProjectNews |
6 | 8 | from projects.validators import validate_project |
7 | 9 | from users.models import LikesOnProject |
8 | 10 | from vacancy.serializers import ProjectVacancyListSerializer |
9 | 11 |
|
| 12 | +User = get_user_model() |
| 13 | + |
10 | 14 |
|
11 | 15 | class AchievementListSerializer(serializers.ModelSerializer): |
12 | 16 | class Meta: |
@@ -204,3 +208,33 @@ class Meta: |
204 | 208 | "projects", |
205 | 209 | ] |
206 | 210 | 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 | + ] |
0 commit comments