class Product(models.Model): name = models.CharField(max_length=100) img = fields.ImageField(upload_to='pics', dependencies=[ FileDependency(attname='img=', processor=ImageProcessor( format='JPEG', scale={ 'max_width': 500, 'max_height': 500 })), ]) img = fields.ImageField(upload_to='pics') max_price = models.IntegerField() min_price = models.IntegerField() Price_display = models.BooleanField(default=False) specification = RichTextField(blank=True, null=True) detail_img = fields.ImageField(upload_to='pics', dependencies=[ FileDependency(attname='img=', processor=ImageProcessor( format='JPEG', scale={ 'max_width': 500, 'max_height': 500 })), ]) detail_img = fields.ImageField(upload_to='pics')
class UserProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile', on_delete=models.CASCADE) avatar = fields.ImageField( upload_to=avatar_image_upload_path, blank=True, default='static/user-bg.jpg', dependencies=[ FileDependency(processor=ImageProcessor(format='JPEG', scale={ 'max_width': 150, 'max_height': 150 })), ]) about = models.TextField(blank=True) # user_type = models.CharField(max_length=1, choices=USER_TYPES, default='b') last_updated = models.DateTimeField(auto_now=True) def __str__(self): return self.user.username def save(self, *args, **kwargs): if self.id and self.avatar: current_avatar = UserProfile.objects.get(pk=self.id).avatar if current_avatar != self.avatar: current_avatar.delete() super(UserProfile, self).save(*args, **kwargs) def get_absolute_url(self): target = reverse('authapp:profile', args=[self.user.username]) return target
class Post(models.Model): title = models.CharField(max_length=100) date_pub = models.DateField(auto_now_add=True) body = models.TextField() created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='create_posts') image = fields.ImageField(blank=True, upload_to='images', dependencies=[ FileDependency(attname='image_jpeg', processor=ImageProcessor( format='JPEG', scale={ 'max_width': 600, 'max_height': 600 })), ]) tag = models.CharField(max_length=100, verbose_name='Tag', blank=True, null=True) def __str__(self): return self.title def get_absolute_url( self ): # - генерация уролов для сопостовления дополнительных элементов в урле urls.py return reverse('post_detail', kwargs={'pk': self.id}) class Meta: verbose_name = 'Пост' verbose_name_plural = 'Посты'
class Product(models.Model): category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE) name = models.CharField(max_length=200, db_index=True) slug = models.SlugField(max_length=200, db_index=True) image = fields.ImageField( upload_to='products/%Y/%m/%d', blank=True, dependencies=[ FileDependency(processor=ImageProcessor(format='JPEG', scale={ 'max_width': 300, 'max_height': 300 })) ]) price = models.DecimalField(max_digits=10, decimal_places=2) description = models.TextField(blank=True) available = models.BooleanField(default=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) class Meta: ordering = ('name', ) index_together = (('id', 'slug'), ) def __str__(self): return self.name def get_absolute_url(self): return reverse('shop:product_detail', args=[self.id, self.slug])
class UserProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL) firstname = models.CharField(max_length=40, default='', blank=True) lastname = models.CharField(max_length=40, default='', blank=True) bio = models.TextField(blank=True, default='') avatar = fields.ImageField(blank=True, null=True, upload_to='avatar_photos/', dependencies=[ FileDependency(attname='avatar_png', processor=ImageProcessor( format='PNG', scale={ 'max_width': 150, 'max_height': 150 })), ]) skills = models.ManyToManyField('projects.Skill', blank=True, default='', related_name='skills') def get_absolute_url(self): return reverse("accounts:profile", {'username': self.user.username}) def __str__(self): return '{} {}'.format(self.firstname, self.lastname)
def image_attribute_resize(attr, width, height): processor = ImageProcessor(format="JPEG", scale={ "max_width": width, "max_height": height } ) return FileDependency(attname=attr, processor=processor)
def test_dimensions_checking(self): p = ImageProcessor() # ones that totally don't make sense self.assertRaises(AssertionError, p._check_scale_params, width=100, min_width=50) self.assertRaises(AssertionError, p._check_scale_params, width=100, max_width=50) self.assertRaises(AssertionError, p._check_scale_params, height=50, min_height=50) self.assertRaises(AssertionError, p._check_scale_params, height=50, max_height=50) self.assertRaises(AssertionError, p._check_scale_params, min_width=100, max_width=50) self.assertRaises(AssertionError, p._check_scale_params, min_height=100, max_height=50) # ones that make no sense with preserve=True self.assertRaises(AssertionError, p._check_scale_params, width=100, height=50) self.assertRaises(AssertionError, p._check_scale_params, width=100, min_height=50) self.assertRaises(AssertionError, p._check_scale_params, width=100, max_height=50) self.assertRaises(AssertionError, p._check_scale_params, height=50, min_width=50) self.assertRaises(AssertionError, p._check_scale_params, height=50, min_height=50) self.assertRaises(AssertionError, p._check_scale_params, min_width=100, max_height=50) self.assertRaises(AssertionError, p._check_scale_params, max_width=100, min_height=50)
class Category(models.Model): title = models.CharField(max_length=200) image = fields.ImageField(upload_to='category',blank=True, dependencies=[ FileDependency(attname='avatar_jpeg', processor=ImageProcessor( format='JPEG', scale={'max_width': 500, 'max_height': 600})), ]) description = models.TextField(blank=True) typ= models.CharField(max_length=100,choices=categorychoices,default="Comedy") def __str__(self): return self.title
def test_misc(self): f1 = ImageFormat('BMP', ext='dib') f2 = ImageFormat('BMP') f3 = ImageFormat('PSD') self.assertEqual(f1, f2) self.assertEqual(f1, 'BMP') self.assertNotEqual(f1, f3) self.assertTrue(f1.can_read) self.assertEqual(f1.get_ext(), 'dib') self.assertEqual(f2.get_ext(), 'bmp') self.assertEqual(f1.get_exts(), 'bmp,dib') self.assertEqual(f1.get_mode(), 'RGB') self.assertEqual(f1.get_mode(old_mode='non_existent'), 'RGB') self.assertEqual(f1.get_mode(old_mode='CMYK'), 'RGB') self.assertEqual(f1.get_mode(old_mode='LA'), 'P') p = ImageProcessor(format=f3) self.assertRaises(AssertionError, p.check_params) self.assertEqual(set(p.supported_formats.input_exts.split(',')), set('sgi,pcx,xpm,tif,tiff,jpg,jpe,jpeg,jfif,xbm,gif,bmp,dib,tga,' 'tpic,im,psd,ppm,pgm,pbm,png'.split(','))) p = ImageProcessor() self.assertIsNone(p.get_ext()) self.assertEquals(p.get_ext(format=ImageFormat('TIFF', ext='')), '')
class Vision_Mission(models.Model): scroll_text = models.CharField(max_length=100, blank=True) vision_name = models.CharField(max_length=100, blank=True) vision_subhead = models.CharField(max_length=300, blank=True) vision_parallax_img = fields.ImageField( upload_to='pics', dependencies=[ FileDependency(attname='img', processor=ImageProcessor(format='JPEG', scale={ 'max_width': 1920, 'max_height': 700 })), ]) vision_parallax_img = fields.ImageField(upload_to='pics')
class Upload_video(models.Model): video_name = models.CharField(max_length=100) video_thumbnail = fields.ImageField( upload_to='pics', dependencies=[ FileDependency(attname='video_thumbnail', processor=ImageProcessor(format='JPEG', scale={ 'max_width': 500, 'max_height': 500 })), ]) video_thumbnail = fields.ImageField(upload_to='pics') videofile = models.FileField(upload_to='videos', null=True) video_description = models.TextField()
class Banner(models.Model): img = fields.ImageField(upload_to='pics', dependencies=[ FileDependency(attname='img', processor=ImageProcessor( format='JPEG', scale={ 'max_width': 1920, 'max_height': 700 })), ]) img = fields.ImageField(upload_to='pics') name = models.CharField(max_length=100) head = models.CharField(max_length=400) subhead = models.TextField() button_bool = models.BooleanField(default=False)
class ProductPhotos(models.Model): image = fields.ImageField( upload_to=product_directory_path, dependencies=[ FileDependency(processor=ImageProcessor(format='JPEG', scale={ 'max_width': 800, 'max_height': 800 })) ], ) alt = models.CharField( null=True, blank=True, max_length=200, help_text='Θα δημιουργηθεί αυτόματα εάν δεν συμπληρωθεί') title = models.CharField( null=True, blank=True, max_length=100, help_text='Θα δημιουργηθεί αυτόματα εάν δεν συμπληρωθεί') product = models.ForeignKey(Product) active = models.BooleanField(default=True) is_primary = models.BooleanField(default=False, verbose_name='Αρχική Εικόνα') is_back = models.BooleanField(default=False, verbose_name='Δεύτερη Εικόνα') class Meta: verbose_name_plural = 'Gallery' def __str__(self): return self.title def image_tag(self): return mark_safe('<img width="150px" height="150px" src="%s%s" />' % (MEDIAURL, self.image)) image_tag.short_description = 'Εικονα' def image_tag_tiny(self): return mark_safe('<img width="150px" height="150px" src="%s%s" />' % (MEDIAURL, self.image)) image_tag_tiny.short_description = 'Εικόνα'
class SubCategory(models.Model): title = models.CharField(max_length=200) image = fields.ImageField(upload_to='subcategory', blank=True, dependencies=[ FileDependency(attname='avatar_jpeg', processor=ImageProcessor( format='JPEG', scale={ 'max_width': 500, 'max_height': 600 })), ]) category = models.ForeignKey(Category, on_delete=models.CASCADE) description = models.TextField(blank=True) seasons = models.IntegerField(default=1) def __str__(self): return self.title
class Misc(models.Model): created = models.DateTimeField(auto_now_add=True) name = models.CharField(max_length=100, blank=True, default='') orig_image = fields.ImageField(upload_to='static/', dependencies=[ FileDependency(attname='image', upload_to='static/misc/', processor=ImageProcessor( format='JPEG', scale={ 'max_width': 900, 'max_height': 900 })), ]) image = models.ImageField(upload_to='static/misc/', null=True, blank=True, editable=False) def __str__(self): return self.name
class Head_footer(models.Model): logo = models.ImageField(upload_to='pics') logo_name_display = models.CharField(max_length=50) Logo_img_display = models.BooleanField(default=False) prod_head = models.CharField(max_length=300, blank=True) video_head = models.CharField(max_length=300, blank=True) contact_head = models.CharField(max_length=300, blank=True) favicon = models.FileField(upload_to='svg') my_email = models.CharField(max_length=100) phn_number = models.CharField(max_length=50, blank=True) address = models.TextField() contact_parallax_img = fields.ImageField( upload_to='pics', dependencies=[ FileDependency(attname='img', processor=ImageProcessor(format='JPEG', scale={ 'max_width': 1920, 'max_height': 700 })), ]) contact_parallax_img = fields.ImageField(upload_to='pics') facebook_link = models.CharField(max_length=100, blank=True)
class Profile(models.Model): user = models.OneToOneField(User, related_name='user', blank=False, unique=True, on_delete=models.CASCADE) first_name = models.CharField('Имя', max_length=100, blank=True) second_name = models.CharField('Фамилия', max_length=100, blank=True) middle_name = models.CharField('Отчество', max_length=100, blank=True) email = models.EmailField('Email', blank=True) phone = models.CharField('Телефон', max_length=100, blank=True) description = models.CharField('О себе', max_length=100, blank=True) avatar = fields.ImageField( 'Фото', dependencies=[ FileDependency(processor=ImageProcessor(format='JPEG', scale={ 'max_width': 200, 'max_height': 240 })) ], upload_to='', blank=True)
def test_misc(self): f1 = ImageFormat('BMP', ext='dib') f2 = ImageFormat('BMP') f3 = ImageFormat('PSD') self.assertEqual(f1, f2) self.assertEqual(f1, 'BMP') self.assertNotEqual(f1, f3) self.assertTrue(f1.can_read) self.assertEqual(f1.get_ext(), 'dib') self.assertEqual(f2.get_ext(), 'bmp') self.assertEqual(f1.get_exts(), 'bmp,dib') self.assertEqual(f1.get_mode(), 'RGB') self.assertEqual(f1.get_mode(old_mode='non_existent'), 'RGB') self.assertEqual(f1.get_mode(old_mode='CMYK'), 'RGB') self.assertEqual(f1.get_mode(old_mode='LA'), 'P') p = ImageProcessor(format=f3) self.assertRaises(AssertionError, p.check_params) self.assertEqual( set(p.supported_formats.input_exts.split(',')), set('sgi,pcx,xpm,tif,tiff,jpg,jpe,jpeg,jfif,xbm,gif,bmp,dib,tga,' 'tpic,im,psd,ppm,pgm,pbm,png'.split(','))) p = ImageProcessor() self.assertIsNone(p.get_ext()) self.assertEquals(p.get_ext(format=ImageFormat('TIFF', ext='')), '')
def test_dimensions_scaling(self): p = ImageProcessor() # scaling up: hard set dims self.assertEqual(p.get_dimensions(200, 100, width=100), (100, 50)) self.assertEqual(p.get_dimensions(200, 100, height=200), (400, 200)) # scaling up: single self.assertEqual(p.get_dimensions(200, 100, min_width=300), (300, 150)) self.assertEqual(p.get_dimensions(200, 100, min_height=200), (400, 200)) # scaling up: both self.assertEqual(p.get_dimensions(200, 100, min_width=300, min_height=200), (400, 200)) self.assertEqual(p.get_dimensions(200, 100, min_width=600, min_height=200), (600, 300)) # scaling up: mixing self.assertEqual(p.get_dimensions(200, 100, min_width=300, max_width=400), (300, 150)) self.assertEqual(p.get_dimensions(200, 100, min_height=200, max_height=400), (400, 200)) # scaling down: single self.assertEqual(p.get_dimensions(200, 100, max_width=50), (50, 25)) self.assertEqual(p.get_dimensions(200, 100, max_height=25), (50, 25)) # scaling down: both self.assertEqual(p.get_dimensions(200, 100, max_width=100, max_height=75), (100, 50)) self.assertEqual(p.get_dimensions(200, 100, max_width=150, max_height=50), (100, 50)) # scaling down: mixin self.assertEqual(p.get_dimensions(200, 100, min_width=50, max_width=100), (100, 50)) self.assertEqual(p.get_dimensions(200, 100, min_height=10, max_height=50), (100, 50)) # no scaling: single self.assertEqual(p.get_dimensions(200, 100, min_width=100), (200, 100)) self.assertEqual(p.get_dimensions(200, 100, min_height=50), (200, 100)) self.assertEqual(p.get_dimensions(200, 100, max_width=300), (200, 100)) self.assertEqual(p.get_dimensions(200, 100, max_height=150), (200, 100)) # no scaling: both self.assertEqual(p.get_dimensions(200, 100, min_width=50, min_height=50), (200, 100)) self.assertEqual(p.get_dimensions(200, 100, max_width=400, max_height=200), (200, 100)) # without preserving ratio self.assertEqual(p.get_dimensions( 200, 100, min_width=50, max_width=100, min_height=2000, max_height=2001, preserve=False), (100, 2000)) self.assertEqual(p.get_dimensions( 200, 100, height=500, min_width=300, max_width=400, preserve=False), (300, 500))
class AboutImg(models.Model): title = models.CharField('Titel',max_length=300) description = models.TextField('Beschreibung', blank=True, null=True) bild = fields.ImageField(upload_to='photo/%m/',blank=True, null=True , dependencies=[FileDependency(attname='bild_png', processor=ImageProcessor(format='PNG', scale={'max_width': 340, 'max_height': 260})),FileDependency(attname='bild_webp', processor=ImageProcessor(format='WEBP', scale={'max_width': 340, 'max_height': 260}))]) bild_png = fields.ImageField(upload_to='',blank=True, null=True) bild_webp = fields.ImageField(upload_to='',blank=True, null=True) def __str__(self): return self.title class Meta: verbose_name_plural = "Überschriften und Hauptfotos" verbose_name = "Überschrift und Hauptfoto" def png_image_url(self): if self.bild_png: png_image_url = self.bild_png.url else: png_image_url = settings.STATIC_URL + 'base_app/img/kein_bild_vorhanden.png' return png_image_url def webp_image_url(self): if self.bild_webp: webp_image_url = self.bild_webp.url else: webp_image_url = settings.STATIC_URL + 'base_app/img/kein_bild_vorhanden.webp' return webp_image_url def image_gesamt_tag(self): png_image_url = self.png_image_url() webp_image_url = self.webp_image_url() return format_html('<img src="{}" onerror="{}{}{}" alt="Über Rado-Montage" class="img-responsive" />'.format(webp_image_url,"this.src='",png_image_url,"'")) image_gesamt_tag.short_description = 'Bild gesamttag' def image_tag(self): if self.bild_png: return format_html('<img src="{}" width="150" height="150" />'.format(self.bild_png.url)) else: return format_html('<img src="{}" width="150" height="150" />'.format(settings.STATIC_URL + 'base_app/img/kein_bild_vorhanden.png')) image_tag.short_description = 'Bild' def image_tag_webp(self): if self.bild_webp: return format_html('<img src="{}" width="150" height="150" />'.format(self.bild_webp.url)) else: return format_html('<img src="{}" width="150" height="150" />'.format(settings.STATIC_URL + 'base_app/img/kein_bild_vorhanden.webp')) image_tag_webp.short_description = 'Bild in .webp Format' def get_absolute_url(self): return reverse('about_app:about_page')
class Mymodel(models.Model): resize_photo = fields.ImageField(upload_to='story1399', null=True, blank=True, dependencies=[ FileDependency(attname='original_photo', processor=ImageProcessor( format='JPEG', scale={'max_width': CONSUMER_BACKGROUND_WIDTH, 'max_height': CONSUMER_BACKGROUND_HEIGHT})) ]) original_photo = models.ImageField(upload_to='story1399', null=True, blank=True)
class Profile(models.Model): first_name = models.CharField('Имя', max_length=20) second_name = models.CharField('Фамилия', max_length=20) middle_name = models.CharField('Отчество', max_length=20) GENDER_CHOICES = ( (u'Мужчина', u'Мужчина'), (u'Женчина', u'Женчина'), ) gender = models.CharField('Пол', max_length=20, choices=GENDER_CHOICES) age = models.PositiveSmallIntegerField('Возраст', validators=[MaxValueValidator(99)]) height = models.PositiveSmallIntegerField( 'Рост', validators=[MaxValueValidator(220)]) weight = models.PositiveSmallIntegerField( 'Вес', validators=[MaxValueValidator(300)]) Hair_Color_Choices = ( (u'Блонд', u'Блонд'), (u'Шатен', u'Шатен'), (u'Брюнет', u'Брюнет'), (u'Рыжий', u'Рыжий'), (u'Русый', u'Русый'), (u'Седой', u'Седой'), (u'Нестандартный', u'Нестандартный'), ) hair = models.CharField('Цвет волос', max_length=20, choices=Hair_Color_Choices) Eye_Color_Choices = ( (u'Синий', u'Синий'), (u'Голубой', u'Голубой'), (u'Серый', u'Серый'), (u'Янтарный', u'Янтарный'), (u'Оливковый', u'Оливковый'), (u'Карий', u'Карий'), (u'Черный', u'Черный'), (u'Желтый', u'Жёлтый'), (u'Хамелеон', u'Хамелеон'), ) eye = models.CharField('Цвет глаз', max_length=40, choices=Eye_Color_Choices) education_Choices = ( (u'Среднее', u'Среднее'), (u'Среднее специальное', u'Среднее специальное'), (u'Неполное высшее', u'Неполное высшее'), (u'Высшее', u'Высшее'), (u'Ученая степень', u'Ученая степень'), ) education = models.CharField('Образование', max_length=40, choices=education_Choices) Job_Cgoices = ( (u'Работаю', u'Работаю'), (u'Не работаю', u'Не работаю'), (u'Непостоянное место работы', u'Непостоянное место работы'), ) job = models.CharField('Работа', max_length=40, choices=Job_Cgoices) children_Choices = ( (u'Нет', u'Нет'), (u'Нет, но хотелось бы', u'Нет, но хотелось бы'), (u'Есть, живем вместе', u'Есть, живем вместе'), (u'Есть, живем раздельно', u'Есть, живем раздельно'), ) children = models.CharField('Дети', max_length=40, choices=children_Choices) Tatoo_p_Choices = ( (u'Нет', u'Нет'), (u'Нет, но хотелось бы', u'Нет, но хотелось бы'), (u'Есть', u'Есть'), ) Tatoo_p = models.CharField('Тату\пирсинги', max_length=20, choices=Tatoo_p_Choices) address = models.CharField('Адрес', max_length=50) email = models.EmailField('Email') phone = models.PositiveSmallIntegerField( 'Телефон', validators=[MaxValueValidator(99999999999)]) description = models.CharField('О себе', max_length=100) description_p = models.CharField('О партнере', max_length=100) avatar = fields.ImageField( 'Фото', dependencies=[ FileDependency(processor=ImageProcessor(format='JPEG', scale={ 'max_width': 200, 'max_height': 240 })) ], upload_to='') ## Конструктор возращаюший Имя и Фамилию. def __str__(self): return smart_str('%s %s' % (self.first_name, self.second_name))
class Profile(models.Model): user = models.OneToOneField(User,on_delete = models.CASCADE) image = fields.ImageField(default = 'default.jpg',upload_to = 'profile_pics',dependencies=[FileDependency(processor=ImageProcessor(format='JPEG', scale={'max_width': 300, 'max_height': 300}))]) def __str__(self): return f'{self.user.username} Profile'
def test_dimensions_scaling(self): p = ImageProcessor() # scaling up: hard set dims self.assertEqual(p.get_dimensions(200, 100, width=100), (100, 50)) self.assertEqual(p.get_dimensions(200, 100, height=200), (400, 200)) # scaling up: single self.assertEqual(p.get_dimensions(200, 100, min_width=300), (300, 150)) self.assertEqual(p.get_dimensions(200, 100, min_height=200), (400, 200)) # scaling up: both self.assertEqual( p.get_dimensions(200, 100, min_width=300, min_height=200), (400, 200)) self.assertEqual( p.get_dimensions(200, 100, min_width=600, min_height=200), (600, 300)) # scaling up: mixing self.assertEqual( p.get_dimensions(200, 100, min_width=300, max_width=400), (300, 150)) self.assertEqual( p.get_dimensions(200, 100, min_height=200, max_height=400), (400, 200)) # scaling down: single self.assertEqual(p.get_dimensions(200, 100, max_width=50), (50, 25)) self.assertEqual(p.get_dimensions(200, 100, max_height=25), (50, 25)) # scaling down: both self.assertEqual( p.get_dimensions(200, 100, max_width=100, max_height=75), (100, 50)) self.assertEqual( p.get_dimensions(200, 100, max_width=150, max_height=50), (100, 50)) # scaling down: mixin self.assertEqual( p.get_dimensions(200, 100, min_width=50, max_width=100), (100, 50)) self.assertEqual( p.get_dimensions(200, 100, min_height=10, max_height=50), (100, 50)) # no scaling: single self.assertEqual(p.get_dimensions(200, 100, min_width=100), (200, 100)) self.assertEqual(p.get_dimensions(200, 100, min_height=50), (200, 100)) self.assertEqual(p.get_dimensions(200, 100, max_width=300), (200, 100)) self.assertEqual(p.get_dimensions(200, 100, max_height=150), (200, 100)) # no scaling: both self.assertEqual( p.get_dimensions(200, 100, min_width=50, min_height=50), (200, 100)) self.assertEqual( p.get_dimensions(200, 100, max_width=400, max_height=200), (200, 100)) # without preserving ratio self.assertEqual( p.get_dimensions(200, 100, min_width=50, max_width=100, min_height=2000, max_height=2001, preserve=False), (100, 2000)) self.assertEqual( p.get_dimensions(200, 100, height=500, min_width=300, max_width=400, preserve=False), (300, 500))