LIL-166. Add serializer, viewset, route, admin, models Gallery & GalleryImage

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 3412647846
commit 9c319c45a0
  1. 43
      api/v1/serializers.py
  2. 3
      api/v1/urls.py
  3. 16
      api/v1/views.py
  4. 15
      apps/content/admin.py
  5. 45
      apps/content/migrations/0004_gallery_galleryimage.py
  6. 35
      apps/content/models.py

@ -1,7 +1,10 @@
from rest_framework import serializers
from apps.course.models import Category, Course, Material, Like
from apps.content.models import Image, Text, ImageText, Video
from apps.content.models import (
Image, Text, ImageText, Video,
Gallery, GalleryImage,
)
class MaterialSerializer(serializers.ModelSerializer):
@ -170,3 +173,41 @@ class VideoSerializer(serializers.ModelSerializer):
'created_at',
'update_at',
)
class GallerySerializer(serializers.ModelSerializer):
class Meta:
model = Gallery
fields = (
'id',
'course',
'title',
'created_at',
'update_at',
)
read_only_fields = (
'id',
'created_at',
'update_at',
)
class GalleryImageSerializer(serializers.ModelSerializer):
class Meta:
model = GalleryImage
fields = (
'id',
'gallery',
'image',
'created_at',
'update_at',
)
read_only_fields = (
'id',
'created_at',
'update_at',
)

@ -11,6 +11,7 @@ from .views import (
MaterialViewSet, LikeViewSet,
ImageViewSet, TextViewSet,
ImageTextViewSet, VideoViewSet,
GalleryViewSet, GalleryImageViewSet,
)
router = DefaultRouter()
@ -23,6 +24,8 @@ router.register(r'images', ImageViewSet, base_name='images')
router.register(r'texts', TextViewSet, base_name='texts')
router.register(r'image-texts', ImageTextViewSet, base_name='image-texts')
router.register(r'videos', VideoViewSet, base_name='videos')
router.register(r'galleries', GalleryViewSet, base_name='galleries')
router.register(r'gallery-images', GalleryImageViewSet, base_name='gallery-images')
schema_view = get_schema_view(

@ -6,10 +6,14 @@ from .serializers import (
MaterialSerializer, LikeSerializer,
ImageSerializer, TextSerializer,
ImageTextSerializer, VideoSerializer,
GallerySerializer, GalleryImageSerializer,
)
from apps.course.models import Category, Course, Material, Like
from apps.content.models import Image, Text, ImageText, Video
from apps.content.models import (
Image, Text, ImageText, Video,
Gallery, GalleryImage,
)
class MaterialViewSet(ExtendedModelViewSet):
@ -63,3 +67,13 @@ class VideoViewSet(ExtendedModelViewSet):
'course', 'lesson'
).all()
serializer_class = VideoSerializer
class GalleryViewSet(ExtendedModelViewSet):
queryset = Gallery.objects.select_related('course').all()
serializer_class = GallerySerializer
class GalleryImageViewSet(ExtendedModelViewSet):
queryset = GalleryImage.objects.select_related('gallery').all()
serializer_class = GalleryImageSerializer

@ -5,7 +5,10 @@ from polymorphic.admin import (
PolymorphicChildModelFilter,
)
from .models import Content, Image, ImageText, Text, Video
from apps.content.models import (
Content, Image, Text, ImageText, Video,
Gallery, GalleryImage,
)
class ContentChildAdmin(PolymorphicChildModelAdmin):
@ -41,3 +44,13 @@ class ContentAdmin(PolymorphicParentModelAdmin):
ImageText,
Video
)
@admin.register(Gallery)
class GalleryAdmin(admin.ModelAdmin):
pass
@admin.register(GalleryImage)
class GalleryImageAdmin(admin.ModelAdmin):
pass

@ -0,0 +1,45 @@
# Generated by Django 2.0.2 on 2018-02-05 13:09
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('course', '0020_auto_20180202_1716'),
('content', '0003_auto_20180205_1246'),
]
operations = [
migrations.CreateModel(
name='Gallery',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(default='', max_length=100, verbose_name='Заголовок')),
('created_at', models.DateTimeField(auto_now_add=True)),
('update_at', models.DateTimeField(auto_now=True)),
('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Course', verbose_name='Курс')),
],
options={
'verbose_name': 'Галерея',
'verbose_name_plural': 'Галереи',
'ordering': ('-created_at',),
},
),
migrations.CreateModel(
name='GalleryImage',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(upload_to='content/gallery_images', verbose_name='Изображение')),
('created_at', models.DateTimeField(auto_now_add=True)),
('update_at', models.DateTimeField(auto_now=True)),
('gallery', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='content.Gallery', verbose_name='Галерея')),
],
options={
'verbose_name': 'Изображение в галерее',
'verbose_name_plural': 'Изображения в галерее',
'ordering': ('-created_at',),
},
),
]

@ -46,3 +46,38 @@ class ImageText(Content):
class Video(Content):
url = models.URLField('Ссылка')
class Gallery(models.Model):
course = models.ForeignKey(
Course, on_delete=models.CASCADE,
null=True, blank=True,
verbose_name='Курс'
)
title = models.CharField('Заголовок', max_length=100, default='')
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'Галерея'
verbose_name_plural = 'Галереи'
ordering = ('-created_at',)
class GalleryImage(models.Model):
gallery = models.ForeignKey(
Gallery, on_delete=models.CASCADE,
verbose_name='Галерея'
)
image = models.ImageField(
'Изображение', upload_to='content/gallery_images'
)
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'Изображение в галерее'
verbose_name_plural = 'Изображения в галерее'
ordering = ('-created_at',)

Loading…
Cancel
Save