62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
from sorl.thumbnail.fields import ImageField as SORLImageField
|
|
|
|
from utils.methods import image_path
|
|
from django.conf import settings
|
|
from . import tasks
|
|
from utils.models import ProjectBaseMixin, SORLImageMixin, PlatformMixin
|
|
|
|
|
|
class ImageQuerySet(models.QuerySet):
|
|
"""QuerySet for model Image."""
|
|
|
|
def originals(self):
|
|
"""Return QuerySet with original images."""
|
|
return self.filter(parent__isnull=True)
|
|
|
|
|
|
class Image(ProjectBaseMixin, SORLImageMixin, PlatformMixin):
|
|
"""Image model."""
|
|
HORIZONTAL = 0
|
|
VERTICAL = 1
|
|
|
|
ORIENTATIONS = (
|
|
(HORIZONTAL, _('Horizontal')),
|
|
(VERTICAL, _('Vertical')),
|
|
)
|
|
|
|
image = SORLImageField(upload_to=image_path,
|
|
verbose_name=_('image file'))
|
|
parent = models.ForeignKey('self',
|
|
blank=True, null=True, default=None,
|
|
related_name='parent_image',
|
|
on_delete=models.SET_DEFAULT,
|
|
verbose_name=_('parent image'))
|
|
orientation = models.PositiveSmallIntegerField(choices=ORIENTATIONS,
|
|
blank=True, null=True, default=None,
|
|
verbose_name=_('image orientation'))
|
|
title = models.CharField(_('title'), max_length=255, default='')
|
|
|
|
objects = ImageQuerySet.as_manager()
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
verbose_name = _('Image')
|
|
verbose_name_plural = _('Images')
|
|
|
|
def __str__(self):
|
|
"""String representation"""
|
|
return str(self.id)
|
|
|
|
def delete_from_remote_storage(self, delete_original: bool = True):
|
|
"""Delete from remote storage"""
|
|
if settings.USE_CELERY:
|
|
tasks.delete_image_from_remote_storage.delay(self.id, delete_original)
|
|
else:
|
|
tasks.delete_image_from_remote_storage(self.id, delete_original)
|
|
|
|
@property
|
|
def childs(self):
|
|
return self.parent_image.filter(parent=self)
|