From 1777656d27db2b06e48cfe7e440381128921ded8 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 25 Jun 2015 10:48:06 +0200 Subject: [PATCH] Organizator | model --- seminar/models.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/seminar/models.py b/seminar/models.py index 04890ef9..c731fa4c 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -12,6 +12,10 @@ from django.utils.text import slugify from django.core.urlresolvers import reverse from django.core.cache import cache +from PIL import Image +import os +from cStringIO import StringIO +from django.core.files.base import ContentFile from django_countries.fields import CountryField from solo.models import SingletonModel @@ -637,3 +641,68 @@ class Novinky(models.Model): verbose_name = 'Novinka' verbose_name_plural = 'Novinky' + +@python_2_unicode_compatible +class Organizator(models.Model): + user = models.OneToOneField(settings.AUTH_USER_MODEL, verbose_name='Osoba', + help_text = 'Vyber účet spřažený s organizátorem.') + prezdivka = models.CharField('Přezdívka', max_length = 32, + null = True, blank = True) + organizuje_od_roku = models.IntegerField('Organizuje od roku', + null = True, blank = True) + organizuje_do_roku = models.IntegerField('Organizuje do roku', + null = True, blank = True) + studuje = models.CharField('Studuje', max_length = 256, + null = True, blank = True) + strucny_popis_organizatora = models.TextField('Stručný popis organizátora', + null = True, blank = True) + foto = models.ImageField('Fotografie organizátora', + upload_to='image_organizatori/%Y/', null = True, blank = True, + help_text = 'Vlož fotografii organizátora o libovoné velikosti') + foto_male = models.ImageField(upload_to='image_organizatori/male/%Y/', + null = True, blank = True, editable = False) + + def __str__(self): + return str(self.user) + + class Meta: + verbose_name = 'Organizátor' + verbose_name_plural = 'Organizátoři' + + def save(self): + original = Image.open(self.foto) + jmeno = os.path.basename(self.foto.file.name) + Organizator._vyrobMiniaturu(original, jmeno, 500, self.foto) + Organizator._vyrobMiniaturu(original, jmeno, 200, self.foto_male) + super(Organizator, self).save() + + @staticmethod + def _vyrobMiniaturu(original, jmeno, maximum, field): + zmensenina = Organizator._zmensiObrazek(original, maximum) + f = StringIO() + try: + zmensenina.save(f, format=original.format) + data = ContentFile(f.getvalue()) + finally: + f.close() + field.save(jmeno, data, save = False) + + @staticmethod + def _zmensiObrazek(original, maximum): + """Preskaluje obrazek tak, aby byl zachovan pomer stran + a zadny rozmer nepresahoval maxRozmer. Pokud zadny rozmer + nepresahuje maxRozmer, tak vrati puvodni obrazek + (tj. nedojde ke zvetseni obrazku).""" + novaVelikost = Organizator._zmensiVelikost(original.size, maximum) + return original.resize(novaVelikost, Image.ANTIALIAS) + + @staticmethod + def _zmensiVelikost(velikost, maximum): + maximum = float(maximum) + w, h = velikost + soucasneMaximum = max(w, h) + if soucasneMaximum <= maximum: + return velikost + pomer = maximum/soucasneMaximum + return (int(w * pomer), int(h * pomer)) +