from django.db import models from django.core.exceptions import ValidationError class Watermark(models.Model): OPACITY_ERROR_TEXT = 'Непрозрачность должна быть должна быть между 0 и 1. Это правило!' TILE = 'tile' SCALE = 'scale' BR = 'br' TR = 'tr' BL = 'bl' TL = 'tl' POSITIONS = ( (TILE, 'плиточно'), (SCALE, 'масштабировано'), (BR, 'нижний правый угол'), (TR, 'верхний правый угол'), (BL, 'нижний левый угол'), (TL, 'верхний левый угол'), ) title = models.CharField(max_length=32, verbose_name='Заголовок', unique=True) mark = models.ImageField(upload_to='watermarks', verbose_name='Водный знак') opacity = models.FloatField(default=1, verbose_name='Непрозрачность', help_text='Значение должно быть от 0 до 1') position = models.CharField(max_length=8, verbose_name='Расположение', choices=POSITIONS) x = models.IntegerField(blank=True, null=True, verbose_name='Отступ по оси Х', default=0) y = models.IntegerField(blank=True, null=True, verbose_name='Отступ по оси У', default=0) is_active = models.BooleanField(default=True, verbose_name='Активна') update_hard = models.BooleanField(default=False, verbose_name='Агрессивно обновлять ватермарки', help_text='Используйте, если хотите обновить уже созданные ватермарки. ' 'Бьет по производительности') def get_position(self): return self.get_position_display() def clean(self): if not 0 <= self.opacity <= 1: raise ValidationError(self.OPACITY_ERROR_TEXT) def __unicode__(self): return self.title def __str__(self): return self.title get_position.short_description = 'Расположение' class Meta: verbose_name = 'Водный знак' verbose_name_plural = 'Водные знаки'