You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
2.2 KiB
52 lines
2.2 KiB
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 = 'Водные знаки'
|
|
|