示例#1
0
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
示例#2
0
 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})
示例#3
0
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
示例#4
0
文件: models.py 项目: rpisarev/abi
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
示例#5
0
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 = "Проекты"
示例#6
0
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
示例#7
0
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
示例#8
0
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
                       })
示例#9
0
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
示例#10
0
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
示例#11
0
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
示例#12
0
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
示例#13
0
文件: models.py 项目: 9gix/aidint
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
示例#14
0
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})
示例#15
0
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')
示例#16
0
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
示例#17
0
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
示例#18
0
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, ))
示例#19
0
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
示例#20
0
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),
                          })
示例#21
0
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"Картины"
示例#22
0
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
示例#23
0
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
示例#24
0
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)
示例#25
0
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
示例#26
0
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})
示例#27
0
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
示例#28
0
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
示例#29
0
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
示例#30
0
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