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 68a96ea2..6182a682 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)
+ AuthorBalanceUsersViewSet, CaptureEmail, UserGalleryViewSet)
router = DefaultRouter()
router.register(r'author-requests', AuthorRequestViewSet, base_name='author-requests')
@@ -45,6 +45,7 @@ router.register(r'gallery-images', GalleryImageViewSet, base_name='gallery-image
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 37127268..e78a77ed 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/user/templates/user/edit_gallery.html b/apps/user/templates/user/edit_gallery.html
index f459bc50..1dced8a3 100644
--- a/apps/user/templates/user/edit_gallery.html
+++ b/apps/user/templates/user/edit_gallery.html
@@ -1,15 +1,34 @@
{% extends "templates/lilcity/index.html" %}
+{% load static %}
+
+{% block head %}
+ {{ block.super }}
+
+{% endblock head %}
{% block pre_app_js %}
+
{% endblock pre_app_js %}
{% block content %}
-