77 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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
 |