diff --git a/apps/collection/migrations/0006_remove_collection_image.py b/apps/collection/migrations/0006_remove_collection_image.py new file mode 100644 index 00000000..fd0d4ac9 --- /dev/null +++ b/apps/collection/migrations/0006_remove_collection_image.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.4 on 2019-08-27 15:34 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('collection', '0005_auto_20190823_1401'), + ] + + operations = [ + migrations.RemoveField( + model_name='collection', + name='image', + ), + ] diff --git a/apps/collection/migrations/0007_collection_image.py b/apps/collection/migrations/0007_collection_image.py new file mode 100644 index 00000000..2e38c309 --- /dev/null +++ b/apps/collection/migrations/0007_collection_image.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.4 on 2019-08-27 15:42 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('gallery', '0001_initial'), + ('collection', '0006_remove_collection_image'), + ] + + operations = [ + migrations.AddField( + model_name='collection', + name='image', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='gallery.Image', verbose_name='Collection image'), + ), + ] diff --git a/apps/collection/models.py b/apps/collection/models.py index 4d03a0ae..6b82e799 100644 --- a/apps/collection/models.py +++ b/apps/collection/models.py @@ -38,9 +38,11 @@ class CollectionQuerySet(models.QuerySet): return self.filter(is_publish=True) -class Collection(ProjectBaseMixin, CollectionNameMixin, - ImageMixin, CollectionDateMixin): +class Collection(ProjectBaseMixin, CollectionNameMixin, CollectionDateMixin): """Collection model.""" + image = models.ForeignKey( + 'gallery.Image', null=True, blank=True, default=None, + verbose_name=_('Collection image'), on_delete=models.CASCADE) is_publish = models.BooleanField( default=False, verbose_name=_('Publish status')) on_top = models.BooleanField( diff --git a/apps/collection/serializers/common.py b/apps/collection/serializers/common.py index 44082406..26c66f0c 100644 --- a/apps/collection/serializers/common.py +++ b/apps/collection/serializers/common.py @@ -5,6 +5,8 @@ from collection import models class CollectionSerializer(serializers.ModelSerializer): """Collection serializer""" + image = serializers.URLField(source='image.get_image_url') + class Meta: model = models.Collection fields = [ diff --git a/apps/gallery/admin.py b/apps/gallery/admin.py index 6ea57afd..fc20b0ee 100644 --- a/apps/gallery/admin.py +++ b/apps/gallery/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin -from gallery.models import Gallery +from gallery.models import Image -@admin.register(Gallery) -class GalleryModelAdmin(admin.ModelAdmin): - """Gallery model admin""" +@admin.register(Image) +class ImageModelAdmin(admin.ModelAdmin): + """Image model admin""" diff --git a/apps/gallery/migrations/0001_initial.py b/apps/gallery/migrations/0001_initial.py new file mode 100644 index 00000000..063105bc --- /dev/null +++ b/apps/gallery/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# Generated by Django 2.2.4 on 2019-08-27 15:40 + +from django.db import migrations, models +import django.utils.timezone +import easy_thumbnails.fields +import utils.methods + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Image', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')), + ('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('image', easy_thumbnails.fields.ThumbnailerImageField(upload_to=utils.methods.image_path, verbose_name='Image file')), + ], + options={ + 'verbose_name': 'Image', + 'verbose_name_plural': 'Images', + }, + ), + ] diff --git a/apps/gallery/models.py b/apps/gallery/models.py index eb86ed38..022a24e0 100644 --- a/apps/gallery/models.py +++ b/apps/gallery/models.py @@ -1,16 +1,21 @@ from django.utils.translation import gettext_lazy as _ +from easy_thumbnails.fields import ThumbnailerImageField +from utils.methods import image_path from utils.models import ProjectBaseMixin, ImageMixin -class Gallery(ProjectBaseMixin, ImageMixin): - """Gallery model.""" +class Image(ProjectBaseMixin, ImageMixin): + """Image model.""" + + image = ThumbnailerImageField(upload_to=image_path, + verbose_name=_('Image file')) class Meta: """Meta class.""" - verbose_name = _('Gallery') - verbose_name_plural = _('Galleries') + verbose_name = _('Image') + verbose_name_plural = _('Images') def __str__(self): """String representation""" - return str(self.get_image_url) + return str(self.id) diff --git a/apps/gallery/serializers.py b/apps/gallery/serializers.py index 9db4e8f6..5794d73b 100644 --- a/apps/gallery/serializers.py +++ b/apps/gallery/serializers.py @@ -3,14 +3,15 @@ from rest_framework import serializers from . import models -class GallerySerializer(serializers.ModelSerializer): - """Serializer for model Gallery.""" +class ImageSerializer(serializers.ModelSerializer): + """Serializer for model Image.""" # RESPONSE - url = serializers.URLField(source='get_image_url') + url = serializers.URLField(source='get_image_url', + required=False) class Meta: """Meta class""" - model = models.Gallery + model = models.Image fields = ( 'image', 'url' diff --git a/apps/news/migrations/0006_remove_news_image.py b/apps/news/migrations/0006_remove_news_image.py new file mode 100644 index 00000000..9d0a15f6 --- /dev/null +++ b/apps/news/migrations/0006_remove_news_image.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.4 on 2019-08-27 15:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0005_auto_20190823_1149'), + ] + + operations = [ + migrations.RemoveField( + model_name='news', + name='image', + ), + ] diff --git a/apps/news/migrations/0007_news_image.py b/apps/news/migrations/0007_news_image.py new file mode 100644 index 00000000..23010bb0 --- /dev/null +++ b/apps/news/migrations/0007_news_image.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.4 on 2019-08-27 15:42 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('gallery', '0001_initial'), + ('news', '0006_remove_news_image'), + ] + + operations = [ + migrations.AddField( + model_name='news', + name='image', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='gallery.Image', verbose_name='News image'), + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index addb600d..28983fdf 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -37,8 +37,11 @@ class NewsQuerySet(models.QuerySet): return self.filter(is_publish=True) -class News(ImageMixin, BaseAttributes): +class News(BaseAttributes): """News model.""" + image = models.ForeignKey( + 'gallery.Image', null=True, blank=True, default=None, + verbose_name=_('News image'), on_delete=models.CASCADE) news_type = models.ForeignKey( NewsType, verbose_name=_('news type'), on_delete=models.CASCADE) diff --git a/apps/news/serializers/common.py b/apps/news/serializers/common.py index 32e4382d..de99cc81 100644 --- a/apps/news/serializers/common.py +++ b/apps/news/serializers/common.py @@ -26,6 +26,7 @@ class NewsLocalizationMixinSerializer(serializers.ModelSerializer): class NewsSerializer(NewsLocalizationMixinSerializer): """News serializer.""" address = AddressSerializer() + image = serializers.URLField(source='image.get_image_url') class Meta: model = models.News diff --git a/apps/utils/models.py b/apps/utils/models.py index 9498982c..ec7ab2da 100644 --- a/apps/utils/models.py +++ b/apps/utils/models.py @@ -1,4 +1,5 @@ """Utils app models.""" +from os.path import exists from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.contrib.gis.db import models @@ -83,6 +84,13 @@ class ImageMixin(models.Model): else: return None + def get_full_image_url(self, request, thumbnail_key=None): + """Get full image url""" + if self.image and exists(self.image.path): + return request.build_absolute_uri(self.get_image(thumbnail_key).url) + else: + return None + image_tag.short_description = _('Image') image_tag.allow_tags = True diff --git a/project/settings/base.py b/project/settings/base.py index 97a75ff7..8305b637 100644 --- a/project/settings/base.py +++ b/project/settings/base.py @@ -57,6 +57,7 @@ PROJECT_APPS = [ 'authorization.apps.AuthorizationConfig', 'collection.apps.CollectionConfig', 'establishment.apps.EstablishmentConfig', + 'gallery.apps.GalleryConfig', 'location.apps.LocationConfig', 'main.apps.MainConfig', 'news.apps.NewsConfig',