class Employee(models.Model): name = models.CharField("employee name", max_length=150, null=False, blank=False) position = models.CharField("employee position", max_length=150) description = models.TextField("extra information") photo = models.ImageField("employee photo", upload_to=upload_to, blank=True, null=True) photo_80x80 = ImageSpecField( source="photo", processors=[SmartResize(80, 80)], format="JPEG", options={"quality": 80}, ) photo_300x200 = ImageSpecField( source="photo", processors=[SmartResize(300, 200)], format="JPEG", options={"quality": 80}, ) class Meta: ordering = ("id", ) def __str__(self): return self.name def __repr__(self): return f"<Employee id={self.pk} name={self.name} position={self.position}>"
class Area(djm.Model): """ A field of knowledge """ #: The title of the area title = djm.CharField(max_length=64) #: An image that illustrates the area image = djm.ImageField(null=True, blank=True, upload_to=area_pic_path) image_thumbnail = ImageSpecField( source='image', processors=[SmartResize(*settings.THUMBNAIL_SIZE)], format='JPEG', options={'quality': settings.HIGH_QUALITY}) image_cover = ImageSpecField( source='image', processors=[SmartResize(*settings.COVER_SIZE)], format='JPEG', options={'quality': settings.HIGH_QUALITY}) img_url = djm.TextField(null=True, blank=True) # TODO deleteme class Meta: ordering = ('title',) def __str__(self): return self.title
class Subarea(djm.Model): """ A category inside a field of knowledge (area) """ #: This subarea's title title = djm.CharField(max_length=256) #: An image that illustrates the area description = djm.TextField(max_length=1024, verbose_name='descrição') #: The :py:class:`synopses.models.Area` that owns this subarea area = djm.ForeignKey(Area, on_delete=djm.PROTECT, related_name='subareas') #: An image that illustrates the subarea image = djm.ImageField(null=True, blank=True, upload_to=subarea_pic_path, verbose_name='imagem') image_thumbnail = ImageSpecField( source='image', processors=[SmartResize(*settings.THUMBNAIL_SIZE)], format='JPEG', options={'quality': settings.HIGH_QUALITY}) image_cover = ImageSpecField( source='image', processors=[SmartResize(*settings.COVER_SIZE)], format='JPEG', options={'quality': settings.HIGH_QUALITY}) img_url = djm.TextField(null=True, blank=True, verbose_name='imagem (url)') # TODO deleteme class Meta: ordering = ('title',) def __str__(self): return self.title
def thumbnail(file, size='104x104'): try: # defining the size x, y = [int(x) for x in size.split('x')] # defining the filename and the miniature filename filehead, filetail = os.path.split(file.path) basename, format = os.path.splitext(filetail) miniature = basename + '_' + size + '.png' filename = file.path miniature_filename = os.path.join(filehead, miniature) filehead, filetail = os.path.split(file.url) miniature_url = filehead + '/' + miniature if os.path.exists(miniature_filename) and os.path.getmtime( filename) > os.path.getmtime(miniature_filename): os.unlink(miniature_filename) # if the image wasn't already resized, resize it if not os.path.exists(miniature_filename): image = Image.open(filename) processor = SmartResize(width=x, height=y) image = processor.process(image) try: image.save(miniature_filename, 'png', quality=90, optimize=1) except Exception as e: print 'Error: %s' % e image.save(miniature_filename, 'png', quality=90) return miniature_url except Exception as e: print 'Error: %s' % e return ""
class IndexConfiguration(SingletonModel): def header_imagen_upload_to(instance, filename): new_filename = get_image_name(clase='Header', filename=filename) return "web/img/index/%s" % new_filename def overlay_publicidad_imagen_upload_to(instance, filename): new_filename = get_image_name(clase='Overlay', filename=filename) return "web/img/index/%s" % new_filename header_titulo = models.CharField(max_length=150, default='Aqui el titulo') header_text = models.TextField(max_length=150, default='Aqui la descripción', null=True, blank=True) header_text_en = models.TextField(max_length=150, default='Aqui la descripción Ingles', null=True, blank=True) header_imagen = ProcessedImageField( processors=[SmartResize(width=2560, height=1500, upscale=False)], format='JPEG', options={'quality': 50}, upload_to=header_imagen_upload_to, verbose_name='Imagen Cabezote (2560 x 1500)', null=True, blank=True) header_imagen_normal = ImageSpecField( processors=[SmartResize(width=1280, height=750, upscale=False)], options={'quality': 50}, source='header_imagen', format='JPEG') header_imagen_webp = ImageSpecField( processors=[SmartResize(width=1280, height=750, upscale=False)], options={'quality': 50}, source='header_imagen', format='WEBP') header_imagen_cell = ImageSpecField( source='header_imagen', processors=[SmartResize(width=412, height=660, upscale=False)], format='JPEG') header_imagen_cell_webp = ImageSpecField( source='header_imagen', processors=[SmartResize(width=412, height=660, upscale=False)], format='WEBP') overlay_publicidad = ProcessedImageField( processors=[ResizeToFit(width=1024, height=768, upscale=False)], format='JPEG', options={'quality': 70}, upload_to=overlay_publicidad_imagen_upload_to, verbose_name='Imagen Overlay Publicidad (1024 x 768)', null=True, blank=True) overlay_url = models.URLField(blank=True, null=True) def __unicode__(self): return "Index" class Meta: verbose_name = "Index"
def resize(uploaded_file: 'SimpleUploadedFile', **options): buffer = BytesIO() img = Image.open(uploaded_file) processor = SmartResize(**options) new_img = processor.process(img) new_img.save(buffer, format='png') return SimpleUploadedFile(name=utils.replace_extension( uploaded_file.name, 'png'), content=buffer.getvalue(), content_type=uploaded_file.content_type)
class Place(CachedEntity): """ A generic geographical place TODO: Change to include building """ #: Name of the place name = djm.CharField(max_length=128) #: Building it is located at building = djm.ForeignKey(Building, null=True, blank=True, on_delete=djm.PROTECT, related_name='places') #: Building floor where it is located floor = djm.IntegerField(default=0) #: Whether it is unlocked to unidentified personnel. unlocked = djm.BooleanField(null=True, default=None) #: Geographic location of the place location = gis.PointField(geography=True, null=True, blank=True) #: List of features associated with this place (risk of explosion, special clothing, ...) features = djm.ManyToManyField('PlaceFeature', blank=True) #: Picture illustrating this place picture = djm.ImageField(upload_to=place_pic_path, null=True, blank=True) picture_cover = ImageSpecField( source='picture', processors=[SmartResize(*settings.COVER_SIZE)], format='JPEG', options={'quality': settings.MEDIUM_QUALITY}) def __str__(self): return f'{self.name} ({self.building})' def short_str(self): return f"{self.name} ({self.building.abbreviation})"
class CasosExitoConfiguration(SingletonModel): def header_imagen_upload_to(instance, filename): new_filename = get_image_name(clase='Header', filename=filename) return "web/img/casexi/%s" % new_filename header_text = models.TextField(max_length=150, verbose_name='Titulo', default='Aqui la descripción', null=True, blank=True) header_text_en = models.TextField(max_length=150, verbose_name='Titulo Ingles', null=True, blank=True) header_imagen = ProcessedImageField( processors=[SmartResize(width=2560, height=1500, upscale=False)], format='JPEG', options={'quality': 50}, upload_to=header_imagen_upload_to, verbose_name='Imagen Cabezote (2560 x 1500)', null=True, blank=True) descripcion = HTMLField('Texto Casos Éxito', default='Descripción casos Éxito', null=True, blank=True) descripcion_en = HTMLField('Texto Casos Éxito Ingles', null=True, blank=True) def __unicode__(self): return "Casos Exito" class Meta: verbose_name = "Casos Exito"
class CityHouse(SortableModel): city = models.ForeignKey(to=City, verbose_name=u'Город') address = models.CharField(verbose_name=u'Адрес', max_length=256) coord_x = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True, verbose_name=u'Широта') coord_y = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True, verbose_name=u'Долгота') image = models.ImageField(verbose_name=u'Обложка', upload_to='cityhouse/') image_resize = ImageSpecField( [SmartResize(*settings.HOUSE_SIZE)], source='image', format='JPEG', options={'quality': 94} ) class Meta: verbose_name = u'Адрес' verbose_name_plural = u'Адреса' app_label = 'landing' ordering = ('order', ) def __unicode__(self): return self.address def pic(self): return '<img src="%s" width="120"/>' % self.image_resize.url pic.short_description = u"Миниатюра" pic.allow_tags = True def save(self, *args, **kwargs): address = u'город %s %s' % (self.city.name, self.address) api_key = settings.YANDEX_MAPS_API_KEY pos = geocode(api_key, address) self.coord_x = float(pos[0]) self.coord_y = float(pos[1]) super(CityHouse, self).save()
class InstagramLink(models.Model): image = models.ImageField(verbose_name='Обложка паблика', upload_to='images', blank=True, null=True) thumb = ImageSpecField(source='image', options={'quality': 80}, processors=[SmartResize(225, 225)]) link = models.CharField( max_length=250, verbose_name='Ссылка на паблик', default='https://www.instagram.com/praktikabeauty/') def __str__(self): return self.thumbnail() def thumbnail(self): if self.image: return mark_safe( '<img style="height:180px;width:180px;" src="{0}"/>'.format( self.thumb.url)) return mark_safe('<p>=(</p>') thumbnail.short_description = 'Миниатюра' class Meta: verbose_name = 'Ссылка' verbose_name_plural = 'Ссылки'
class Travel(CommonPage): class Meta: verbose_name = u'Статья' verbose_name_plural = u'Статьи' app_label = 'travel' def __unicode__(self): return self.title # # def save(self): # if not self.slug: # self.slug = slugify(self.title) # super(Travel, self).save() def get_absolute_url(self): return reverse('travels:detail', kwargs={'slug': self.slug}) def pic(self): return '<img src="%s" width="170"/>' % self.cover_resize.url pic.short_description = u"Обложка" pic.allow_tags = True user = models.ForeignKey(to=User, verbose_name=u'Пользователь') # title = models.CharField(verbose_name=u'Заголовок', max_length=255) text = RichTextField(verbose_name=u'Текст') cover = models.ImageField(verbose_name=u'Обложка', upload_to=get_image_path) cover_resize = ImageSpecField([SmartResize(*settings.TRAVEL_COVER_SIZE)], source='cover', format='JPEG', options={'quality': 94}) slug = models.SlugField(max_length=100, verbose_name=u'url')
class LaEmpresaConfiguration(SingletonModel): def imagen_principal_upload_to(instance, filename): new_filename = get_image_name(clase='La Empresa Principal', filename=filename) return "web/img/empr/%s" % new_filename def imagen_info_upload_to(instance, filename): new_filename = get_image_name(clase='Info', filename=filename) return "web/img/empr/%s" % new_filename titulo = models.CharField(max_length=150, default='Aqui el titulo') texto = HTMLField('Descripcion Empresa', default='Aqui la descripción') texto_en = HTMLField('Descripcion Empresa Ingles', default='Aqui la descripción en ingles') imagen_principal = ProcessedImageField( processors=[SmartResize(width=570, height=362, upscale=False)], format='JPEG', options={'quality': 70}, upload_to=imagen_principal_upload_to, verbose_name='Imagen Principal (570x362)', null=True, blank=True) imagen_info_empresa = ProcessedImageField( processors=[SmartResize(width=570, height=362, upscale=False)], format='JPEG', options={'quality': 70}, upload_to=imagen_info_upload_to, verbose_name='Imagen Informacion Empresa (570x362)', null=True, blank=True) imagen_info_empresa_en = ProcessedImageField( processors=[SmartResize(width=570, height=362, upscale=False)], format='JPEG', options={'quality': 70}, upload_to=imagen_info_upload_to, verbose_name='Imagen Informacion Empresa Ingles (570x362)', null=True, blank=True) video = models.CharField(max_length=500, null=True, blank=True) video_en = models.CharField(max_length=500, null=True, blank=True) def __unicode__(self): return "La Empresa" class Meta: verbose_name = "La Empresa"
class Award(djm.Model): name = djm.CharField(max_length=32, unique=True) style = djm.CharField(max_length=15, null=True, default=None) points = djm.IntegerField(default=0) users = djm.ManyToManyField(User, through='UserAward', related_name='awards') picture = djm.ImageField(upload_to=award_pic_path, null=True) picture_icon = ImageSpecField( source='picture', processors=[SmartResize(*settings.MEDIUM_ICON_SIZE)], format='PNG')
class NestPicture(models.Model): def get_file_path(instance, filename): return os.path.join('pictures/nests/', make_unique_filename(filename)) observation = models.ForeignKey(Nest, on_delete=models.CASCADE, related_name='pictures') image = models.ImageField(upload_to=get_file_path) thumbnail = ImageSpecField(source='image', processors=[SmartResize(600, 300)], format='JPEG', options={'quality': 90})
def thumbnail(file, size='104x104'): try: # We will place the thumbnails in a directory alongside the image, # which will be named the same as the image except with "-thumbnail" # appended to it. Within that directory, there will be other images # named according to the requested size, for example "30x30.png" and # so forth. This way, the profile image names are entirely predictable # from the image names alone. thumb_dir = file.path + '-thumbnail' # Make sure that the thumbnail directory exists. if not os.path.isdir(thumb_dir): os.mkdir(thumb_dir) # Figure out the stand-alone filename ("30x30.png", for example) and # subsequently define the full local path name to the thumbnail and # its corresponding URL. thumb_filename = size + '.png' thumb_fullpath = os.path.join(thumb_dir, thumb_filename) thumb_url = file.url + '-thumbnail/' + thumb_filename # Check if the image is newer than the requested thumbnail, and if so, # remove the thumbnail so that it will be regenerated. if os.path.exists(thumb_fullpath) and os.path.getmtime( file.path) > os.path.getmtime(thumb_fullpath): os.unlink(thumb_fullpath) # Create the thumbnail if it does not already exist. if not os.path.exists(thumb_fullpath): width, height = [int(dimension) for dimension in size.split('x')] processor = SmartResize(width=width, height=height) image = processor.process(Image.open(file.path)) image.save(thumb_fullpath, 'png', quality=90, optimize=True) return thumb_url except Exception as e: print 'Error: %s' % e return ""
def add_artwork(image_uri, file_path, processor='SmartResize'): size = (300, 300) try: if 'http' in image_uri: # Remote image file h = requests.head(image_uri) content_type = h.headers.get('content-type') r = requests.get(image_uri) image_data = r.content print(content_type) else: # Local image file mime = MimeTypes() content_type, a = mime.guess_type(filename) with open(image_uri, 'rb') as file: image_data = file.read() except Exception as e: print("Coult not open {0}".format(image_uri)) return False # Try to embed picture try: fd = mutagen.File(file_path) image = Image.open(BytesIO(image_data)) if 'resizetofit' in processor.lower(): color_thief = ColorThief(BytesIO(image_data)) # get the dominant color # dominant_color = color_thief.get_color(quality=10) dominant_color = color_thief.get_palette()[0] processor = ResizeToFit(size[0], size[1]) else: processor = SmartResize(size[0], size[1]) dominant_color = (255, 255, 255) print(dominant_color) new_img = processor.process(image) background = Image.new("RGB", size, dominant_color) background.paste(new_img, mask=new_img.split()[3]) # 3 is the alpha channel temp = BytesIO() background.save(temp, format="JPEG") fd.tags.add( APIC(encoding=3, mime=content_type, type=3, desc=u'Album', data=temp.getvalue())) fd.save() return True except Exception as e: print(e) print('Could not set album art') return False
class Solucion(TimeStampedModel): def header_imagen_upload_to(instance, filename): new_filename = get_image_name(filename=filename) return "web/img/solu/%s" % new_filename def imagen_boton_upload_to(instance, filename): new_filename = get_image_name(filename=filename) return "web/img/solu/%s" % new_filename nombre = models.CharField(max_length=120, verbose_name=_('Nombre')) nombre_en = models.CharField(max_length=120, verbose_name='Nombre en ingles', default='Nombre en Ingles') icono_class = models.CharField(default='', max_length=100) texto = HTMLField('Texto Soluciones', default='Descripción de esta solución', null=True, blank=True) texto_en = HTMLField('Texto Soluciones Ingles', default='Descripción de esta solución en Ingles', null=True, blank=True) orden = models.PositiveIntegerField(default=0) slug = models.SlugField(null=True, blank=True) header_imagen = ProcessedImageField( processors=[SmartResize(width=2560, height=588, upscale=False)], format='JPEG', options={'quality': 70}, upload_to=header_imagen_upload_to, verbose_name='Imagen Cabezote', null=True, blank=True ) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): super().save(force_insert, force_update, using, update_fields) cache = CacheConfiguration.objects.get() cache.soluciones_update = timezone.now() cache.save() def delete(self, using=None, keep_parents=False): cache = CacheConfiguration.objects.get() cache.soluciones_update = timezone.now() cache.save() return super().delete(using, keep_parents) def get_absolute_url(self): if self.slug: return reverse('web_soluciones:solucion_detail_slug', kwargs={"slug": self.slug}) return reverse('web_soluciones:solucion_detail', kwargs={"pk": self.pk}) def __str__(self): return self.nombre class Meta: verbose_name = 'Solución' verbose_name_plural = 'Soluciones'
class Slider(models.Model): class Meta: verbose_name = u'Слайд' verbose_name_plural = u'Слайды' def __unicode__(self): return u'%s г.%s' % (self.name, self.city.name) city = models.ForeignKey(to=City, verbose_name=u'Город') name = models.CharField(verbose_name=u'Здание', max_length=255) image = models.ImageField(verbose_name=u'Изображение', upload_to=get_slider_path) image_resize = ImageSpecField( [SmartResize(*settings.CITY_SLIDER_SIZE)], source='image', format='JPEG', options={'quality': 94} )
class Excurse(CommonPage): class Meta: verbose_name = u'Экскурсия' verbose_name_plural = u'Экскурсии' app_label = 'excurse' ordering = [ '-created', ] def __unicode__(self): return self.title # def save(self): # self.slug = slugify(self.title) # super(Excurse, self).save() def pic(self): return '<img src="%s" width="170"/>' % self.cover_resize.url def get_absolute_url(self): return reverse('excurse:detail', kwargs={'slug': self.slug}) pic.short_description = u"Обложка" pic.allow_tags = True section = models.ForeignKey(to=ExcurseSection, verbose_name=u'Направление') # name = models.CharField(verbose_name=u'Название', max_length=250) cover = models.ImageField(upload_to=get_image_path, verbose_name=u'Обложка') cover_resize = ImageSpecField([SmartResize(*settings.EXCURSE_COVER_SIZE)], source='cover', format='JPEG', options={'quality': 94}) price = models.PositiveIntegerField(verbose_name=u'Стоимость', blank=True, null=True) price_desc = models.TextField(verbose_name=u'Описание стоимости', blank=True, null=True) time = models.CharField(verbose_name=u'Длительность', max_length=250, blank=True, null=True) start = models.CharField(verbose_name=u'Отправка', max_length=250, blank=True, null=True) text = RichTextField(verbose_name=u'Текст') slug = models.SlugField(max_length=100, verbose_name=u'url')
class BlockExample(models.Model): class Meta: verbose_name = u'Прмеры размещений' verbose_name_plural = u'Прмеры размещений' app_label = 'landing' ordering = ('city', ) def __unicode__(self): return self.name city = models.ForeignKey(to=City, verbose_name=u'Город', null=True, blank=True) name = models.CharField(verbose_name=u'Название фотографии(адрес)', max_length=256) image = models.ImageField(verbose_name=u'Фотография', upload_to=upload_to) image_resize = ImageSpecField( [SmartResize(*settings.EXAMPLE_THUMB_SIZE)], source='image', format='JPEG', options={'quality': 94} )
class NestPicture(models.Model): def get_file_path(instance, filename): return os.path.join('pictures/nests/', make_unique_filename(filename)) observation = models.ForeignKey(Nest, on_delete=models.CASCADE, related_name='pictures', blank=True, null=True) datetime = models.DateTimeField(auto_now_add=True) image = models.ImageField(verbose_name=_("Photo"), upload_to=get_file_path) thumbnail = ImageSpecField(source='image', processors=[SmartResize(600, 300)], format='JPEG', options={'quality': 90}) def to_dict(self): return {'url': self.image.url, 'name': self.image.name}
class BlockReview(models.Model): class Meta: verbose_name = u'Отзыв' verbose_name_plural = u'Отзывы' app_label = 'landing' ordering = ('city', ) def __unicode__(self): return self.name city = models.ForeignKey(to=City, verbose_name=u'Город', null=True, blank=True) name = models.CharField(verbose_name=u'ФИО', max_length=256) image = models.ImageField(verbose_name=u'Фотография', upload_to=upload_to) image_resize = ImageSpecField( [SmartResize(*settings.REVIEW_THUMB_SIZE)], source='image', format='JPEG', options={'quality': 94} ) link = models.CharField(verbose_name=u'ссылка', max_length=256, blank=True, null=True) description = models.TextField(verbose_name=u'Описание(компания, должность)') text = models.TextField(verbose_name=u'Текст комментария')
class Gallery(SortableModel): image = models.ImageField(verbose_name=u'Изображение', upload_to='gallery/') image_resize = ImageSpecField( [SmartResize(*settings.GALLERY_SIZE)], source='image', format='JPEG', options={'quality': 94} ) class Meta: verbose_name = u'Галерея' verbose_name_plural = u'Галерея' app_label = 'landing' ordering = ('order', ) def __unicode__(self): return u'Изображение #%s' % self.id def pic(self): return '<img src="%s" width="120"/>' % self.image_resize.url pic.short_description = u"Миниатюра" pic.allow_tags = True
class Thanks(SortableModel): name = models.CharField(verbose_name=u'Название или ФИО', max_length=256) desc = models.CharField(verbose_name=u'Подпись', max_length=256, blank=True, null=True) image = models.ImageField(verbose_name=u'Благодарственно письмо', upload_to='thanks/') image_resize = ImageSpecField( [SmartResize(*settings.THANKS_SIZE)], source='image', format='JPEG', options={'quality': 94} ) class Meta: verbose_name = u'Благодарственное письмо' verbose_name_plural = u'Благодарственные письма' app_label = 'landing' ordering = ('order', ) def __unicode__(self): return self.name def pic(self): return '<img src="%s" width="120"/>' % self.image_resize.url pic.short_description = u"Миниатюра" pic.allow_tags = True
class Certificate(models.Model): class Meta: verbose_name = u"Сертификат" verbose_name_plural = u"Сертификаты" app_label = 'certificate' def __unicode__(self): if self.alt: return self.alt else: return self.image.url image = models.ImageField(verbose_name=u'Изображения', upload_to='certificate/') image_resize = ImageSpecField([SmartResize(*settings.CERTIFICATE_SIZE)], source='image', format='JPEG', options={'quality': 94}) alt = models.CharField(verbose_name=u'Описание', max_length=500, null=True, blank=True)
class Why(models.Model): class Meta: verbose_name = u'Почему именно мы' verbose_name_plural = u'Почему именно мы' app_label = 'landing' def __unicode__(self): return self.name def pic(self): return '<img src="%s" width="170"/>' % self.icon_resize.url pic.short_description = u"Иконка" pic.allow_tags = True name = models.CharField(verbose_name=u'Заголовок', max_length=256) text = models.TextField(verbose_name=u'Текст') icon = models.ImageField(upload_to=get_image_path, verbose_name=u'Иконка') icon_resize = ImageSpecField([SmartResize(*settings.WHY_ICON_SIZE)], source='icon', format='PNG', options={'quality': 94})
class Photo(models.Model): class Meta: verbose_name = u'Фотография' verbose_name_plural = u'Фотографии' app_label = 'landing' def __unicode__(self): return self.name def pic(self): return '<img src="%s" width="170"/>' % self.image_resize.url pic.short_description = u"Изображение" pic.allow_tags = True name = models.CharField(verbose_name=u'Название', max_length=256) image = models.ImageField(upload_to=get_photo_path, verbose_name=u'Изображение') image_resize = ImageSpecField([SmartResize(*settings.PHOTO_IMAGE_SIZE)], source='image', format='JPEG', options={'quality': 94})
class Department(Importable, CachedEntity): """An (official) department""" #: Full name of the department name = djm.CharField(max_length=128) #: Verbose description of the department role and activities. description = MarkdownxField(null=True, blank=True) #: Headquarters building building = djm.ForeignKey(Building, on_delete=djm.PROTECT, null=True, blank=True, related_name='departments') #: Flag telling whether the department still exists extinguished = djm.BooleanField(default=True) #: Picture illustrating this department picture = djm.ImageField(upload_to=department_pic_path, null=True, blank=True) picture_thumbnail = ImageSpecField( source='picture', processors=[SmartResize(*settings.THUMBNAIL_SIZE)], format='JPEG', options={'quality': settings.MEDIUM_QUALITY}) #: URL to this departments's official page url = djm.URLField(max_length=256, null=True, blank=True) #: Phone number in the format +country number,extension phone = djm.CharField(max_length=20, null=True, blank=True) #: This department's general email address email = djm.EmailField(null=True, blank=True) #: This department's president president = djm.ForeignKey( 'Teacher', null=True, blank=True, on_delete=djm.PROTECT, related_name='presided_departments') class Meta: ordering = ['name'] def __str__(self): return self.name def get_absolute_url(self): return reverse('college:department', args=[self.id])
class StaffProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="staff_profile") position = models.CharField(verbose_name="position title", max_length=250, default="Author") photo = models.ImageField(verbose_name="photo", upload_to=staff_photo_upload_to, blank=True, null=True) bio = models.TextField( verbose_name="biography", blank=True, null=True, help_text= "Optional author biography or other short personal information", ) created_at = models.DateTimeField(verbose_name="created at", auto_now_add=True) updated_at = models.DateTimeField(verbose_name="updated at", auto_now=True) photo_400x400 = ImageSpecField( source="photo", processors=[SmartResize(400, 400)], format="PNG", ) class Meta: verbose_name = "staff profile" verbose_name_plural = "staff profiles" def __str__(self): return self.position def __repr__(self): return "<StaffProfile id={} user_id={} position={}>".format( self.pk, self.user_id, self.position)
class CostImage(SortableModel): cost = models.ForeignKey(to=Cost, verbose_name=u'Стоимость') image = models.ImageField(verbose_name=u'Изображение', upload_to='cost/') image_resize = ImageSpecField( [SmartResize(*settings.COST_IMAGE_SIZE)], source='image', format='JPEG', options={'quality': 94} ) class Meta: verbose_name = u'Изображение' verbose_name_plural = u'Изображения' app_label = 'landing' ordering = ('order', ) def __unicode__(self): return u'Изображение #%s' % self.id def pic(self): if self.image: return '<img src="%s" width="120"/>' % self.image_resize.url else: return '----' pic.short_description = u"Миниатюра" pic.allow_tags = True