class SubCategory(BaseCategory): category = models.ForeignKey(Category, default=1) description = models.TextField(default="", verbose_name="Комплектация") image = models.ImageField(upload_to=make_upload_path, blank=True, default='', verbose_name="Картинка") image_small = ImageSpecField(source='image', processors=[ResizeToFill(250, 250)], format='JPEG', options={'quality': 60}) image_middle = ImageSpecField(source='image', processors=[ResizeToFill(660, 500)], format='JPEG', options={'quality': 100}) image_large = ImageSpecField(source='image', processors=[ResizeToFill(840, 500)], format='JPEG', options={'quality': 70}) class Meta: verbose_name = "Подкатегория" verbose_name_plural = "Подкатегории" def __str__(self): return self.name
def get_file_path(self, filename): extension = filename.split('.')[-1] filename = "%s.%s" % (uuid.uuid4(), extension) return os.path.join("images", filename) photo = models.ImageField(verbose_name=u'Poster', upload_to=get_file_path, max_length=256, blank=True, null=True) photo_small = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(50, 50)], image_field='photo', format='JPEG', options={'quality': 90}) photo_medium = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(300, 200)], image_field='photo', format='JPEG', options={'quality': 90}) photo_big = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(640, 480)], image_field='photo', format='JPEG', options={'quality': 90})
class CarouselInner(models.Model): service = models.ForeignKey( Services, on_delete=models.CASCADE, verbose_name='Услуга',) title = models.CharField(max_length=30, verbose_name='Заголовок',) text = models.CharField(max_length=500, blank=True, null=True, verbose_name='Текст',) img = models.ImageField(upload_to='setting', verbose_name='Изображение',) img_mobile = ImageSpecField(source='img', processors=[ Adjust(contrast=1.2, sharpness=1.2), ResizeToFill(800, 800)], format='JPEG', options={'quality': 90} ) img_desktop = ImageSpecField(source='img', processors=[ Adjust(contrast=1.2, sharpness=1.2), ResizeToFill(1920, 1080)], format='JPEG', options={'quality': 90} ) def image_img(self): if self.img: return mark_safe(u'<div align="center"><img src="{0}" height="40"/></a></div>'.format(self.img.url)) else: return 'Пиктограмма отсутствует.' image_img.short_description = ' ' class Meta: verbose_name_plural = "Вкладки карусели" verbose_name = "Вкладка" def __str__(self): return self.title
class PortfImage(models.Model): def get_file_path(self, filename): extension = filename.split('.')[-1] filename = '%s.%s' % (uuid.uuid4(), extension) return os.path.join('images', filename) record = models.ForeignKey(PortfRecord, related_name='images', blank=True) image = models.ImageField(upload_to=get_file_path, max_length=256) name = models.CharField(max_length=60) image_small = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(120, 120)], image_field='image', format='JPEG', options={'quality': 90}) image_medium = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(260, 260)], image_field='image', format='JPEG', options={'quality': 90}) image_big = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(640, 480)], image_field='image', format='JPEG', options={'quality': 90}) '''image(s) to portfolio''' def __unicode__(self): return self.name
class Project(models.Model): title = models.CharField(max_length=180, default="Название проекта", verbose_name="Название") metadescription = models.CharField(max_length=180, verbose_name="Meta description", default="def") keywords = models.CharField(max_length=180, blank=True, null=True) date = models.DateTimeField(auto_now_add=True) description = models.TextField(default="Описание", verbose_name="Описание") image = models.ImageField(upload_to=make_upload_path, blank=True, default='', verbose_name="Картинка") image_small = ImageSpecField(source='image', processors=[ResizeToFill(250, 250)], format='JPEG', options={'quality': 60}) image_large = ImageSpecField(source='image', processors=[ResizeToFill(840, 500)], format='JPEG', options={'quality': 60}) slug = models.SlugField(unique=True, default='') boolVisible = models.BooleanField(default=False, verbose_name="Опублковать") def __str__(self): return self.title class Meta(): verbose_name = "Проект" verbose_name_plural = "Проекты"
class Img(models.Model): img = models.ImageField(upload_to='images') img_medium = ImageSpecField(source='img', processors=[ResizeToFill(280, 170)], format='JPEG', options={'quality': 90}) img_big = ImageSpecField(source='img', processors=[ResizeToFill(640, 480)], format='JPEG', options={'quality': 90}) desc = models.CharField(max_length=120, blank=True) key = models.SlugField(unique=True, max_length=10) upload_date = models.DateTimeField(default=datetime.now) view_date = models.DateTimeField(default=datetime.now) view_count = models.PositiveIntegerField(default=0) like_count = models.PositiveIntegerField(default=0) usr = models.ManyToManyField(User) def get_absolute_url(self): return "/{}".format(self.key) def __str__(self): return 'Key:{} Image name:{}'.format(self.key, self.img.name) @classmethod def create(cls, img, desc, user=0): key = base56.encode(randint(0, 0x7fffff)) obj, _ = cls.objects.get_or_create(img=img, defaults={ 'key': key, 'desc': desc }) obj.usr.add(user) return obj
class Portfolio(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) show = models.BooleanField(_("show"), default=True) title = models.CharField(max_length=200) description = models.TextField(_("description"), blank=True) author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) main_image = models.ImageField( _("main image"), upload_to=get_file_path, null=True, blank=True, ) large = ImageSpecField([ResizeToFill(930, 310)], source="main_image") thumbnail = ImageSpecField([ResizeToFill(360, 320)], source="main_image") @property def upload_dir(self): return 'portfolio/' def image_url(self): return self.thumbnail.url class Meta: ordering = ("created_at", ) verbose_name = _("Portfolio") def __str__(self): return self.author.username
class NomadPost(Post): summary = models.TextField() image = models.ImageField(upload_to="images/posts/%Y/%m/%d", max_length=500, blank=True) # Imagekit specs pic = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(720)], source='image', format='PNG', options={'quality': 90}) listed_pic = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(720, 300)], source='image', format='PNG', options={'quality': 90}) def __unicode__(self): return self.title def get_absolute_url(self): # URLconf for non-country blog configurations category = self.categories.latest('id') return reverse('post_detail', kwargs={ 'category_slug': category.slug, 'slug': self.slug })
class Works(models.Model): name = models.CharField(max_length=200, verbose_name=u"Название") descriptions = models.TextField(max_length=500, verbose_name=u"Описание") mainPic = models.ImageField(upload_to='mPic', height_field=None, width_field=None, max_length=100, verbose_name=u"Главная картинка", default='default-image.jpg') mainCompressPic = ImageSpecField(source='mainPic', format='JPEG', options={'quality': 90}, processors=[ Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(389, 380) ]) webMainCompressPic = ImageSpecField(source='mainPic', format='WEBP', options={'quality': 90}, processors=[ Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(389, 380) ]) class Meta: verbose_name = u"Работа" verbose_name_plural = u"Работы" def __str__(self): return self.name
class Category(BaseCategory): description = models.CharField(default="", max_length=300, verbose_name="Описание") boolShowOnMain = models.BooleanField( default=False, verbose_name="Публиковать вместе с категориями") image = models.ImageField(upload_to=make_upload_path, blank=True, default='', verbose_name="Картинка") image_small = ImageSpecField(source='image', processors=[ResizeToFill(250, 250)], format='JPEG', options={'quality': 60}) image_large = ImageSpecField(source='image', processors=[ResizeToFill(840, 500)], format='JPEG', options={'quality': 60}) class Meta: verbose_name = "Категория" verbose_name_plural = "Категории" def __str__(self): return self.name
class Image(models.Model): created_at = models.DateTimeField(auto_now_add=True) enabled = models.BooleanField(_("enabled"), default=True) title = models.CharField(_("name"), max_length=100) portfolio = models.ForeignKey(Portfolio, null=True, on_delete=models.SET_NULL, verbose_name=_("portfolio")) image = models.ImageField( _("image"), upload_to=get_file_path, help_text=_("recommended size 1000x665"), null=True, blank=True, ) large = ImageSpecField([ResizeToFill(930, 310)], source="image") thumbnail = ImageSpecField([ResizeToFill(360, 320)], source="image") @property def upload_dir(self): return 'images/' def __str__(self): return self.title
class ImageMessage(models.Model): letter = models.ForeignKey(Message, on_delete = models.CASCADE) image = models.ImageField(upload_to="images/", null = True, blank = True) image_small = ImageSpecField([Adjust(contrast = 1, sharpness = 1), ResizeToFill(100, 100)], format = 'JPEG', options = {'quality' : 75}) image_ultra = ImageSpecField([Adjust(contrast = 1, sharpness = 1), ResizeToFill(50, 50)], format = 'JPEG', options = {'quality' : 50}) def __str__(self): return self.letter.writer.username
class Photo(models.Model): caption = models.CharField(max_length=100) original = models.ImageField(upload_to=get_cause_original_path) thumbnail = ImageSpecField([ResizeToFit(100,100)], cache_to=get_cache_path, image_field='original', format='JPEG') preview = ImageSpecField([ResizeToFit(500,500)], cache_to=get_cache_path, image_field='original', format='JPEG') cause = models.ForeignKey(Cause) def __unicode__(self): return self.caption
class ImagesSub(models.Model): category = models.ForeignKey(SubCategory) name = models.CharField(default="Name", max_length=25) image = models.ImageField(upload_to=make_upload_path, blank=True, default='', verbose_name="Image") image_small = ImageSpecField(source='image', processors=[ResizeToFill(250, 250)], format='JPEG', options={'quality': 60}) image_large = ImageSpecField(source='image', processors=[ResizeToFill(840, 500)], format='JPEG', options={'quality': 60})
class Book(models.Model): YEAR_CHOICES = [] for r in range(1900, datetime.now().year + 1): YEAR_CHOICES.append((r, r)) def get_file_path(self, filename): extension = filename.split('.')[-1] filename = "%s.%s" % (uuid4(), extension) return os.path.join("images/covers", filename) def __str__(self): return self.name def save(self, *args, **kwargs): self.slug = '%s-%i' % (slugify(self.name), self.pub_date) super(Book, self).save(*args, **kwargs) name = models.CharField(max_length=200) coverpic = models.ImageField(upload_to=get_file_path, default='images/default_book_pic.png') coverpic_small = ImageSpecField(source='coverpic', processors=[ResizeToFill(100, 100)], format='JPEG', options={'quality': 60}) pub_date = models.IntegerField(choices=YEAR_CHOICES, default=1900) approve_date = models.DateTimeField(auto_now_add=True) genre = models.ForeignKey(Genre, related_name='books', on_delete=models.PROTECT) author = models.ForeignKey(Author, on_delete=models.PROTECT) slug = models.SlugField(default='slug')
class UserProfile(models.Model): user = models.OneToOneField(User) avatar = models.ImageField(upload_to=img_url, blank=True, null=True) avatar_small = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(40, 40)], format='JPEG', options={'quality': 90}) avatar_medium = ImageSpecField( [Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(70, 70)], format='JPEG', options={'quality': 90}) def __str__(self): return self.user.username
class PhotoGallery(models.Model): title = models.CharField(verbose_name='Название фото', max_length=100, db_index=True) created = models.DateField(verbose_name='Дата добавления фото', auto_now_add=True) photo = models.ImageField(verbose_name='Фото', upload_to='Main/PhotoGallery', height_field=None, width_field=None, max_length=256, blank=True, null=True) photo_s = ImageSpecField([Adjust(contrast=1.0, sharpness=1.0), ResizeToFill(350, 170)], source='photo', format='JPEG', options={'quality': 100}) descriptions = models.TextField(verbose_name='Описание фото', null=True, blank=True) album = models.ForeignKey(PhotoAlbums, verbose_name='Альбом', null=True, blank=True, on_delete=models.CASCADE) class Meta: verbose_name = "Фотография" verbose_name_plural = "Фотографии" ordering = ["-id"] def save(self, *args, **kwargs): super().save(*args, **kwargs) def __str__(self): return self.title
class Avatar(File): file = models.ImageField(upload_to=get_file_upload_path) thumbnail = ImageSpecField( source='file', processors=[ ResizeToFit(*settings.FILES_AVATAR_THUMB_SIZE, anchor=Anchor.CENTER, upscale=False) ], format=settings.FILES_AVATAR_EXTENSION, options={'quality': settings.FILES_AVATAR_THUMB_QUALITY}) objects = AvatarQuerySet.as_manager() class Meta: verbose_name = _("user's avatar") verbose_name_plural = _("users' avatars") def __str__(self): return f"Avatar of user {self.creator_id}" def delete(self, using=None, keep_parents=False): default_storage.delete(self.thumbnail.name) # pylint: disable=no-member return super().delete(using, keep_parents) def get_absolute_url(self): return reverse("api:files:avatars-detail", args=(self.id, ))
class ImagePost(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) image = models.ImageField(upload_to="images/") image_small = ImageSpecField( [Adjust(contrast=1, sharpness=1), ResizeToFill(100, 100)], format='JPEG', options={'quality': 75}) image_ultra = ImageSpecField( [Adjust(contrast=1, sharpness=1), ResizeToFill(50, 50)], format='JPEG', options={'quality': 50}) def __str__(self): return self.post.author.username
def spec_factory(width=16, height=16, source='image', to_fit=True, *args, **kwargs): """ Abstract factory for ImageSpecField with default thumbnail params""" if to_fit: main_processor = ResizeToFit(width, height, mat_color=(255, 255, 255, 0)) else: main_processor = ResizeToFill( width, height, ) processors = [EXIFRotationPreventor()] \ + kwargs.pop('pre_processors', []) \ + [main_processor] \ + kwargs.pop('extra_processors', []) return ImageSpecField(processors=processors, source=source, format=kwargs.pop('format', 'PNG'), options={ 'quality': kwargs.pop('options__quality', 50), 'progressive': kwargs.pop('options__progressive', True), })
class Pictures(models.Model): work = models.ForeignKey(Works, related_name='picture', on_delete=models.CASCADE, verbose_name=u"Картинкы") pic = models.ImageField(upload_to='pic', height_field=None, width_field=None, max_length=100, verbose_name=u"Картинка") compressPic = ImageSpecField(source='pic', format='JPEG', options={'quality': 90}, processors=[ Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(1000, 1000) ]) mobileCompressPic = ImageSpecField(source='pic', format='JPEG', options={'quality': 90}, processors=[ Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(600, 600) ]) webPic = ImageSpecField(source='pic', format='WEBP', options={'quality': 90}, processors=[ Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(1000, 1000) ]) mobileWebPic = ImageSpecField(source='pic', format='WEBP', options={'quality': 90}, processors=[ Adjust(contrast=1.2, sharpness=1.1), ResizeToFit(600, 600) ]) class Meta: verbose_name = u"Картина" verbose_name_plural = u"Картины"
class About(models.Model): title = CharField(max_length=1000, blank=True, default="") subtitle = CharField(max_length=1000, blank=True, default="") info = TextField(blank=True, default="") index = IntegerField(default=0) externURL = URLField(verbose_name="Extern link", default="", blank=True) image = ImageField(upload_to="about_images", null=True) largeImage = ImageSpecField(source="image", processors=[ResizeToFill(1920, 1080)], format='JPEG', options={ 'quality': 75, 'progressive': True }) mediumImage = ImageSpecField(source="image", processors=[ResizeToFill(1280, 720)], format='JPEG', options={ 'quality': 75, 'progressive': True }) smallImage = ImageSpecField(source="image", processors=[ResizeToFill(640, 360)], format='JPEG', options={ 'quality': 75, 'progressive': True }) def getShortDescription(self): return str(self.title + " - " + self.subtitle[:50] + "...") def toHTML(self): return self.info.replace("<p", "<p class=\"rl-document__paragraph\"")\ .replace("<span", "<span class=\"rl-document__title\"") def __unicode__(self): return self.title + " - " + self.subtitle
class Image(models.Model): created_at = models.DateTimeField(auto_now_add=True) enabled = models.BooleanField(_("enabled"), default=True) title = models.CharField(_("name"), max_length=200) portfolio = models.ForeignKey(Portfolio, null=True, on_delete=models.SET_NULL, related_name='portfolio') image = models.ImageField(upload_to='portfolio/%Y/%m/%d/', default="") large = ImageSpecField([ResizeToFill(540, 300)], source="image") thumbnail = ImageSpecField([ResizeToFill(360, 320)], source="image") def __str__(self): return self.title
class Avatar(models.Model): avatar = models.ImageField(upload_to='users', default='users/default.jpg') avatar_small = ImageSpecField( format='JPEG', source='avatar', processors=[Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(40, 40)], options={'quality': 90}) avatar_medium = ImageSpecField(format='JPEG', source='avatar', processors=[ Adjust(contrast=1.2, sharpness=1.1), ResizeToFill(250, 250) ], options={'quality': 90}) avatar_large = ImageSpecField(format='JPEG', source='avatar', processors=[ResizeToFill(500, 500)], options={'quality': 100}) date_uploaded = models.DateField(default=timezone.now)
class Photo(models.Model): lection = models.ForeignKey(Lection) name = models.CharField(max_length = 100) image = models.ImageField(upload_to='lections_photos/photos') image_small = ImageSpecField(source='image', processors=[ResizeToFit(300, 300)], format='JPEG', options={'quality': 60}) def __str__(self): return self.name
class Photo(models.Model): advertisement = models.ForeignKey( Advertisement, on_delete=models.CASCADE, related_name='photos', ) file = models.ImageField(upload_to=get_image_filename) uploaded_at = models.DateTimeField(auto_now_add=True) file_small = ImageSpecField(source='file', processors=[ResizeToFill(100, 100)], format='JPEG', options={'quality': 60}) file_medium = ImageSpecField(source='file', processors=[ResizeToFill(200, 200)], format='JPEG', options={'quality': 60}) file_big = ImageSpecField(source='file', processors=[ResizeToFill(640, 480)], format='JPEG', options={'quality': 60})
class Course(models.Model): name = models.CharField(max_length=100) date = models.DateTimeField() image = models.ImageField(upload_to='achievement_photos') image_small = ImageSpecField(source='image', processors=[ResizeToFit(50, 50)], format='JPEG', options={'quality': 60}) class Meta: ordering = ['date'] def __str__(self): return self.name
class Portfolio(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) show = models.BooleanField(_("show"), default=True) title = models.CharField(max_length=200) description = models.TextField(_("description"), default="") author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) image = models.ImageField(upload_to='portfolio/%Y/%m/%d/', default="") large = ImageSpecField([ResizeToFill(930, 310)], source="image") thumbnail = ImageSpecField([ResizeToFill(360, 300)], source="image") class Meta: ordering = ("created_at", ) verbose_name = _("Portfolio") def __str__(self): return self.title def get_pk(self): return self.pk
class Note(models.Model): user = models.ForeignKey(User) name = models.CharField(max_length=100) date = models.DateTimeField() image = models.ImageField(upload_to='user_blog_photos', blank=True) image_small = ImageSpecField(source='image', processors=[ResizeToFit(300, 300)], format='JPEG', options={'quality': 100}) description = models.TextField() class Meta: ordering = ['-date'] def __str__(self): return self.name
class Lection(models.Model): course = models.ForeignKey(Course) name = models.CharField(max_length=100) description = models.TextField() image = models.ImageField(upload_to='lections_photos') image_small = ImageSpecField(source='image', processors=[ResizeToFit(300, 300)], format='JPEG', options={'quality': 60}) date = models.DateTimeField() class Meta: ordering = ['date'] def __str__(self): return self.name