from django.db import models #from django.db.models import Q from imagekit.models import ImageSpecField from imagekit.processors import ResizeToFit, Transpose import os from soustredeni.models import Soustredeni VZDY=0 ORG=1 NIKDY=2 VIDITELNOST = ( (VZDY, 'Vždy'), (ORG, 'Organizátorům'), (NIKDY, 'Nikdy'), ) # tyhle funkce jsou tady jen kvůli starým migracím, které se na ně odkazují # až se ty migrace někdy squashnou, tak by mělo být možné funkce smazat def obrazek_filename_maly(): pass def obrazek_filename_stredni(): pass def obrazek_filename_velky(): pass def obrazek_filename(self, filename): gal = self.galerie cislo_gal = gal.pk # najdi kořenovou galerii while (gal.galerie_up): gal = gal.galerie_up # soustředění je v cestě jen pokud galerie pod nějaké patří cesta = ( ['Galerie'] + (["soustredeni_{}".format(gal.soustredeni.pk)] if gal.soustredeni else []) + ["galerie_{}".format(cislo_gal), self.nazev] ) return os.path.join(*cesta) class Obrazek(models.Model): obrazek_velky = models.ImageField(upload_to=obrazek_filename, help_text = "Lze vložit libovolně velký obrázek. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.") obrazek_stredni = ImageSpecField(source='obrazek_velky', processors=[Transpose(Transpose.AUTO), ResizeToFit(900, 675, upscale=False)], options={'quality': 95}) obrazek_maly = ImageSpecField(source='obrazek_velky', processors=[Transpose(Transpose.AUTO), ResizeToFit(167, 167, upscale=False)], options={'quality': 95}) nazev = models.CharField('Název', max_length=50, blank=True, null=True) popis = models.TextField('Popis', blank=True, null=True) datum_vlozeni = models.DateTimeField('Datum vložení', auto_now_add=True) galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.SET_NULL) poradi = models.IntegerField('Pořadí', blank=True, null=True) def __str__(self): return self.obrazek_velky.name class Meta: verbose_name = 'Obrázek' verbose_name_plural = 'Obrázky' ordering = ['nazev'] def obrazek_maly_tag(self): if not self.obrazek_maly: return '' return u''.format(self.obrazek_maly.url) obrazek_maly_tag.short_description = "Náhled" obrazek_maly_tag.allow_tags = True def save(self, *args, **kwargs): # obrázek potřebuje název, protože se z něj generuje cesta pro jeho uložení # (a pak se podle něj taky řadí) if self.nazev is None: self.nazev = os.path.basename(self.obrazek_velky.name) super(Obrazek, self).save(*args, **kwargs) class Galerie(models.Model): nazev = models.CharField('Název', max_length=100) datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True) datum_zmeny = models.DateTimeField('Datum poslední změny', auto_now = True) popis = models.TextField('Popis', blank = True, null = True) titulni_obrazek = models.ForeignKey(Obrazek, blank = True, null = True, related_name = "+", on_delete = models.SET_NULL) zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST) galerie_up = models.ForeignKey('Galerie', blank = True, null = True, on_delete=models.SET_NULL) soustredeni = models.ForeignKey(Soustredeni, blank = True, null = True, on_delete=models.PROTECT) poradi = models.IntegerField('Pořadí', blank = True, null = False, default = 0) def __str__(self): return self.nazev class Meta: verbose_name = 'Galerie' verbose_name_plural = 'Galerie' #def link_na_preview(self): #"""Odkaz na galerii, používá se v admin rozhranní. """ #return 'Preview' % self.id #link_na_preview.allow_tags = True #link_na_preview.short_description = 'Zobrazit galerii' # #def je_publikovano(self): #"""Vraci True, pokud je tato galerie publikovana. """ #if self.zobrazit == VZDY: #return True #if self.zobrazit == PODLE_CLANKU: #for clanek in self.clanek_set.all(): #if clanek.je_publikovano(): #return True #return False # #@staticmethod #def publikovane_galerie(): #"""Vraci galerie, ktere uz maji byt publikovane.""" #clanky = Blog.models.Clanek.publikovane_clanky() #return Galerie.objects.filter(Q(zobrazit=VZDY) | (Q(clanek__in=clanky) & Q(zobrazit=PODLE_CLANKU))).distinct()