""" Tento soubor slouží k definici databázového modelu. Třídy rozšiřují většinou :class:`django.db.models.Model` a jejich atributy jsou většinou sloupce v databázi (tj. nastaví se na hodnotu něčeho z :mod:`django.db.models`). Na výběr jsou: - :class:`django.db.models.TextField` - :class:`django.db.models.ForeignKey` - :class:`django.db.models.DateField` - :class:`django.db.models.DateTimeField` - :class:`django.db.models.ImageField` - :class:`django.db.models.CharField` """ from django.core.exceptions import ValidationError from django.db import models from django.utils import timezone class FotkaHeader(models.Model): """ fotka pro :mod:`fotka_header`, konkrétně :class:`~fotka_header.models.FotkaUrlVazba` """ class Meta: ordering = ['-cas'] db_table = 'fotky_header' verbose_name = u'fotka do pozadí menu' verbose_name_plural = u'fotky do pozadí menu' cas = models.DateTimeField(u'čas vložení fotky', default=timezone.now, help_text='Čas vložení fotky') """ čas vložení fotky """ nazev = models.CharField( u'název fotky', null=False, blank=False, unique=True, primary_key=True, max_length=50, help_text='Název např. archiv_noc' ) """ jméno fotky na webu """ fotka = models.ImageField(upload_to='header', null=False, blank=False) """ soubor fotky (Nahrává se automaticky do složky ``media``.) """ def __str__(self): return self.nazev def clean(self): """ kontroluje, zda sedí poměr stran """ if not self.fotka: raise ValidationError("Chybí obrázek") if abs(self.fotka.width - (self.fotka.height * 970 / 350)) > 2: raise ValidationError("Obrázek by měl mít rozměry 970w na 350h, nebo alespoň podobný poměr stran.") super().clean() class FotkaUrlVazba(models.Model): """ spojení :class:`~fotka_header.models.FotkaHeader` a url (resp. „prefixu“ url), na které má být zobrazována """ class Meta: ordering = ['url'] db_table = 'fotky_url_vazby' verbose_name = u'vazba url a fotky do pozadí menu' verbose_name_plural = u'vazby url a fotek do pozadí menu' url = models.CharField( u'URL', blank=True, null=False, max_length=100, help_text='url prefix stránek např: /archiv/ nebo /' ) """ url prefix stránek, kde má být fotka zobrazena, např: /archiv/ nebo / """ fotka = models.ForeignKey( FotkaHeader, blank=False, null=False, verbose_name='fotka', on_delete=models.CASCADE ) """ :class:`~fotka_header.models.FotkaHeader`, která má být zobrazována """ DOBA_DEN = 'den' DOBA_NOC = 'noc' DOBA_OBOJI = 'oboji' DOBA_CHOICES = [ (DOBA_DEN, 'Zobrazit jen ve dne'), (DOBA_NOC, 'Zobrazit jen v noci'), (DOBA_OBOJI, 'Zobrazovat pořád')] denni_doba = models.CharField('denní doba', max_length=16, choices=DOBA_CHOICES, blank=False, default=DOBA_OBOJI) """ dení doba, kdy tam má být zobrazována """ def __str__(self): return self.url def url_fotky(self): """ vrací url fotky (tj. url, kde reálně získám soubor fotky) """ return self.fotka.fotka.url