diff --git a/api/v1/serializers/mixins.py b/api/v1/serializers/mixins.py index 50e7d19d..a79ff8e5 100644 --- a/api/v1/serializers/mixins.py +++ b/api/v1/serializers/mixins.py @@ -131,7 +131,7 @@ class DispatchMaterialMixin(object): class DispatchGalleryMixin(object): - def dispatch_gallery(self, course, gallery): + def dispatch_gallery(self, obj, gallery): if gallery: if 'id' in gallery and gallery['id']: g = Gallery.objects.get(id=gallery['id']) @@ -145,15 +145,19 @@ class DispatchGalleryMixin(object): ) if 'images' in gallery: for image in gallery['images']: + if isinstance(image['img'], ImageObject): + img = image['img'] + else: + img = ImageObject.objects.get(id=image['img']) if 'id' in image and image['id']: gi = GalleryImage.objects.get(id=image['id']) gi.gallery = g - gi.img = image['img'] + gi.img = img gi.save() else: gi = GalleryImage.objects.create( gallery=g, - img=image['img'], + img=img, ) - course.gallery = g - course.save() + obj.gallery = g + obj.save() diff --git a/api/v1/serializers/user.py b/api/v1/serializers/user.py index bbb5e6b5..79f17d32 100644 --- a/api/v1/serializers/user.py +++ b/api/v1/serializers/user.py @@ -3,8 +3,10 @@ from rest_framework import serializers from django.contrib.auth import get_user_model +from api.v1.serializers.content import GallerySerializer, GalleryImageSerializer, GalleryImageCreateSerializer from . import Base64ImageField from apps.user.models import AuthorRequest +from .mixins import DispatchGalleryMixin User = get_user_model() @@ -104,3 +106,32 @@ class AuthorRequestSerializer(serializers.ModelSerializer): 'created_at', 'update_at', ) + + +class UserGallerySerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = ( + 'gallery', + ) + + +class UserGalleryUpdateSerializer(DispatchGalleryMixin, serializers.ModelSerializer): + images = serializers.ListField() + + class Meta: + model = User + fields = ( + 'images', + ) + + def update(self, instance, validated_data): + images = validated_data.pop('images', {}) + self.dispatch_gallery(instance, { + 'id': instance.gallery_id, + 'images': images, + }) + return instance + + def to_representation(self, instance): + return UserGallerySerializer(instance=instance, context=self.context).to_representation(instance) diff --git a/api/v1/urls.py b/api/v1/urls.py index 500c51c8..b86acbbc 100644 --- a/api/v1/urls.py +++ b/api/v1/urls.py @@ -19,7 +19,7 @@ from .views import ( SchoolScheduleViewSet, LiveLessonViewSet, PaymentViewSet, ObjectCommentsViewSet, ContestViewSet, ContestWorkViewSet, - AuthorBalanceUsersViewSet, CaptureEmail, FAQViewSet) + AuthorBalanceUsersViewSet, CaptureEmail, FAQViewSet, UserGalleryViewSet) router = DefaultRouter() router.register(r'author-requests', AuthorRequestViewSet, base_name='author-requests') @@ -45,6 +45,7 @@ router.register(r'faq', FAQViewSet, base_name='faq') router.register(r'school-schedules', SchoolScheduleViewSet, base_name='school-schedules') router.register(r'users', UserViewSet, base_name='users') +router.register(r'user-gallery', UserGalleryViewSet, base_name='user-gallery') router.register(r'contests', ContestViewSet, base_name='contests') router.register(r'contest-works', ContestWorkViewSet, base_name='contest_works') diff --git a/api/v1/views.py b/api/v1/views.py index a567a7cc..a7f04cc7 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -4,7 +4,7 @@ from decimal import Decimal from django.contrib.auth import get_user_model from django.db.models import Q -from rest_framework import status, views, viewsets, generics +from rest_framework import status, views, viewsets, generics, mixins from rest_framework.decorators import detail_route, list_route, action, permission_classes, authentication_classes from rest_framework.response import Response @@ -42,7 +42,7 @@ from .serializers.payment import ( from .serializers.user import ( AuthorRequestSerializer, UserSerializer, UserPhotoSerializer, -) + UserGallerySerializer, UserGalleryUpdateSerializer) from .serializers.contest import ( ContestCreateSerializer, ContestSerializer, ContestWorkSerializer, ContestWorkCreateSerializer ) @@ -475,6 +475,13 @@ class UserViewSet(ExtendedModelViewSet): return Response({'success': False}, status=status.HTTP_400_BAD_REQUEST) +class UserGalleryViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): + queryset = User.objects.all() + serializer_class = UserGalleryUpdateSerializer + # FIXME + authentication_classes = [] + + class SchoolScheduleViewSet(ExtendedModelViewSet): queryset = SchoolSchedule.objects.all() serializer_class = SchoolScheduleSerializer diff --git a/apps/school/templates/blocks/schedule.html b/apps/school/templates/blocks/schedule.html index 15b129fb..1a021d31 100644 --- a/apps/school/templates/blocks/schedule.html +++ b/apps/school/templates/blocks/schedule.html @@ -10,7 +10,9 @@ {% endfor %}