diff --git a/api/v1/serializers/contest.py b/api/v1/serializers/contest.py index 3d76244d..6288c5fc 100644 --- a/api/v1/serializers/contest.py +++ b/api/v1/serializers/contest.py @@ -9,6 +9,7 @@ from apps.content.models import (Contest, ContestWork) class ContestSerializer(serializers.ModelSerializer): cover = ImageObjectSerializer() content = ContentSerializer(many=True) + class Meta: model = Contest fields = '__all__' @@ -19,6 +20,7 @@ class ContestCreateSerializer(DispatchContentMixin, serializers.ModelSerializer) child=ContentCreateSerializer(), required=False, ) + class Meta: model = Contest fields = '__all__' @@ -40,6 +42,18 @@ class ContestCreateSerializer(DispatchContentMixin, serializers.ModelSerializer) class ContestWorkSerializer(serializers.ModelSerializer): + image = ImageObjectSerializer() + + class Meta: + model = ContestWork + fields = ['id', 'user', 'contest', 'image', 'child_full_name', 'age', + 'created_at', 'likes', 'img_width', 'img_height'] + + +class ContestWorkCreateSerializer(serializers.ModelSerializer): class Meta: model = ContestWork fields = '__all__' + + def to_representation(self, instance): + return ContestWorkSerializer(instance=instance, context=self.context).to_representation(instance) diff --git a/api/v1/urls.py b/api/v1/urls.py index 0e8cab3d..51610cb6 100644 --- a/api/v1/urls.py +++ b/api/v1/urls.py @@ -45,7 +45,7 @@ router.register(r'school-schedules', SchoolScheduleViewSet, base_name='school-sc router.register(r'users', UserViewSet, base_name='users') router.register(r'contests', ContestViewSet, base_name='contests') -router.register(r'contest_works', ContestWorkViewSet, base_name='contest_works') +router.register(r'contest-works', ContestWorkViewSet, base_name='contest_works') # router.register(r'configs', ConfigViewSet, base_name='configs') diff --git a/api/v1/views.py b/api/v1/views.py index ac9d70fe..95fea15b 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -39,7 +39,9 @@ from .serializers.user import ( AuthorRequestSerializer, UserSerializer, UserPhotoSerializer, ) -from .serializers.contest import ContestCreateSerializer, ContestSerializer, ContestWorkSerializer +from .serializers.contest import ( + ContestCreateSerializer, ContestSerializer, ContestWorkSerializer, ContestWorkCreateSerializer +) from .permissions import ( IsAdmin, IsAdminOrIsSelf, @@ -446,5 +448,10 @@ class ContestViewSet(ExtendedModelViewSet): class ContestWorkViewSet(ExtendedModelViewSet): - queryset = ContestWork.objects.all() - serializer_class = ContestWorkSerializer + queryset = ContestWork.objects.order_by('-created_at') + serializer_class = ContestWorkCreateSerializer + serializer_class_map = { + 'list': ContestWorkSerializer, + 'retrieve': ContestWorkSerializer, + } + filter_fields = ('contest',) diff --git a/apps/content/models.py b/apps/content/models.py index 3f4992ea..378c9995 100644 --- a/apps/content/models.py +++ b/apps/content/models.py @@ -179,3 +179,11 @@ class ContestWork(models.Model): age = models.SmallIntegerField() created_at = models.DateTimeField(auto_now_add=True) likes = models.ManyToManyField('course.Like', blank=True) + + @property + def img_width(self): + return self.image.image.width if self.image and self.image.image else None + + @property + def img_height(self): + return self.image.image.height if self.image and self.image.image else None diff --git a/apps/content/templates/content/blocks/contest_work.html b/apps/content/templates/content/blocks/contest_work.html deleted file mode 100644 index b80e6e06..00000000 --- a/apps/content/templates/content/blocks/contest_work.html +++ /dev/null @@ -1,3 +0,0 @@ -