diff --git a/api/v1/serializers/content.py b/api/v1/serializers/content.py index aff24dd5..89daefa1 100644 --- a/api/v1/serializers/content.py +++ b/api/v1/serializers/content.py @@ -85,12 +85,16 @@ class ImageObjectSerializer(serializers.ModelSerializer): image = Base64ImageField( required=True, allow_empty_file=False, allow_null=False, read_only=False, ) + image_thumbnail = Base64ImageField( + required=False, allow_empty_file=True, allow_null=True, read_only=True, + ) class Meta: model = ImageObject fields = ( 'id', 'image', + 'image_thumbnail', 'created_at', 'update_at', ) diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index 573b0f76..fe06ca53 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -1,3 +1,5 @@ +from ipware import get_client_ip + from rest_framework import serializers from rest_framework.validators import UniqueValidator @@ -88,13 +90,14 @@ class LikeCreateSerializer(serializers.ModelSerializer): return Like() obj_type = validated_data.pop('obj_type') obj_id = validated_data.pop('obj_id') + client_ip, is_routable = get_client_ip(self.context['request']) if obj_type == self.OBJ_TYPE_CONTEST_WORK: contest_work = ContestWork.objects.get(pk=obj_id) # FIXME in prod: fixed if contest_work.user == user or contest_work.likes.filter(user=user).exists(): # if contest_work.likes.filter(user=user).exists(): return Like() - like = Like.objects.create(user=user) + like = Like.objects.create(user=user, ip=client_ip) contest_work.likes.add(like) return like diff --git a/apps/content/admin.py b/apps/content/admin.py index 1c92c012..c025f198 100644 --- a/apps/content/admin.py +++ b/apps/content/admin.py @@ -8,6 +8,7 @@ from polymorphic.admin import ( from apps.content.models import ( Baner, Content, Image, Text, ImageText, Video, Gallery, GalleryImage, ImageObject, + Contest,ContestWork, ) @@ -79,3 +80,13 @@ class ContentAdmin(PolymorphicParentModelAdmin): @admin.register(GalleryImage) class GalleryImageAdmin(admin.ModelAdmin): pass + + +@admin.register(Contest) +class ContestAdmin(admin.ModelAdmin): + base_model = Contest + + +@admin.register(ContestWork) +class ContestWorkAdmin(admin.ModelAdmin): + base_model = ContestWork diff --git a/apps/content/models.py b/apps/content/models.py index bbf023d8..197e1e7d 100644 --- a/apps/content/models.py +++ b/apps/content/models.py @@ -2,6 +2,8 @@ from urllib.parse import urlparse from django.db import models from django.contrib.auth import get_user_model from django.urls import reverse_lazy +from imagekit.models import ImageSpecField +from imagekit.processors import ResizeToCover from polymorphic.models import PolymorphicModel @@ -11,6 +13,10 @@ User = get_user_model() class ImageObject(models.Model): image = models.ImageField('Изображение', upload_to='content/imageobject') + image_thumbnail = ImageSpecField(source='image', + processors=[ResizeToCover(300, 200, False)], + format='JPEG', + options={'quality': 85}) created_at = models.DateTimeField(auto_now_add=True) update_at = models.DateTimeField(auto_now=True) diff --git a/apps/content/templates/content/contest_work.html b/apps/content/templates/content/contest_work.html index 67e2e287..5184faae 100644 --- a/apps/content/templates/content/contest_work.html +++ b/apps/content/templates/content/contest_work.html @@ -1,8 +1,14 @@ {% extends "templates/lilcity/index.html" %} +{% load rupluralize from plural %} {% load static %} -{% block title %}{{ contest_work.child_full_name }}, {{ contest_work.age }} лет{% endblock title %} - +{% block title %}Конкурс Lil.School{% endblock title %} +{% block description %}Работа {{ contest_work.child_full_name }}, {{ contest_work.age | rupluralize:"год,года,лет" }}{% endblock description%} +{% block ogdescription %}Работа {{ contest_work.child_full_name }}, {{ contest_work.age | rupluralize:"год,года,лет" }}{% endblock ogdescription %} {% block ogimage %}http://{{request.META.HTTP_HOST}}{{ contest_work.image.image.url }}{% endblock ogimage %} +{% block head %} + + +{% endblock head %} {% block content %}
+ src="{% if lesson.cover %}{{ lesson.cover.image_thumbnail.url }}{% else %}{% static 'img/no_cover.png' %}{% endif %}">
+ src="{% if lesson.cover %}{{ lesson.cover.image_thumbnail.url }}{% else %}{% static 'img/no_cover.png' %}{% endif %}">