@ -16,7 +16,7 @@ from imagekit.processors import ResizeToFit, Transpose
from PIL import Image
import os
from functools import partial
#from functools import partial
from cStringIO import StringIO
from django . core . files . base import ContentFile
@ -402,12 +402,14 @@ class Problem(SeminarModelBase):
TYP_ULOHA = ' uloha '
TYP_TEMA = ' tema '
TYP_SERIAL = ' serial '
TYP_KONFERA = ' konfera '
TYP_ORG_CLANEK = ' org-clanek '
TYP_RES_CLANEK = ' res-clanek '
TYP_CHOICES = [
( TYP_ULOHA , u ' Úloha ' ) ,
( TYP_TEMA , u ' Téma ' ) ,
( TYP_SERIAL , u ' Seriál ' ) ,
( TYP_KONFERA , u ' Konfera ' ) ,
( TYP_ORG_CLANEK , u ' Organizátorský článek ' ) ,
( TYP_RES_CLANEK , u ' Řešitelský článek ' ) ,
]
@ -545,6 +547,10 @@ class Reseni(SeminarModelBase):
# PrilohaReseni method
# TODO vyresit partial, tak aby slo migrovat
#def generate_filename(self, filename, directory):
# Django 1.9 podporuje partial
def generate_filename ( self , filename ) :
clean = filename . replace ( ' / ' , ' - ' ) . replace ( ' \0 ' , ' ' )
datedir = timezone . now ( ) . strftime ( ' % Y- % m ' )
@ -553,6 +559,16 @@ def generate_filename(self, filename):
clean )
return os . path . join ( settings . SEMINAR_RESENI_DIR , datedir , fname )
def generate_filename_konfera ( self , filename ) :
clean = filename . replace ( ' / ' , ' - ' ) . replace ( ' \0 ' , ' ' )
datedir = timezone . now ( ) . strftime ( ' % Y- % m ' )
fname = " %s _ %s " % (
timezone . now ( ) . strftime ( ' % Y- % m- %d - % H: % M ' ) ,
clean )
return os . path . join ( settings . SEMINAR_KONFERY_DIR , datedir , fname )
# TODO vyresit partial tak, aby slo migrovat
# return os.path.join(directory, datedir, fname)
@reversion . register ( ignore_duplicate_revisions = True )
@python_2_unicode_compatible
@ -580,6 +596,75 @@ class PrilohaReseni(SeminarModelBase):
return force_unicode ( self . soubor )
@python_2_unicode_compatible
class Pohadka ( SeminarModelBase ) :
u """ Kus pohádky před/za úlohou v čísle """
class Meta :
db_table = ' seminar_pohadky '
verbose_name = u ' Pohádka '
verbose_name_plural = u ' Pohádky '
ordering = [ ' uloha__cislo_zadani ' , ' uloha__kod ' , ' -pred ' ]
# Interní ID
id = models . AutoField ( primary_key = True )
text = models . TextField ( u ' Text pohádky ' )
uloha = models . ForeignKey (
Problem ,
verbose_name = u ' Úloha ' ,
related_name = ' pohadky '
)
# Kusů pohádky je v čísle obvykle o 1 více, než úloh. Jeden bude za úlohou
# místo před ní.
pred = models . BooleanField ( u ' Před úlohou ' , default = True )
autor = models . ForeignKey (
settings . AUTH_USER_MODEL ,
verbose_name = " Autor pohádky " ,
# Při nahrávání z TeXu není vyplnění vyžadováno, v adminu je
null = True ,
blank = False
)
timestamp = models . DateTimeField (
u ' Vytvořeno ' ,
default = timezone . now ,
blank = True ,
editable = False
)
def __str__ ( self ) :
uryvek = self . text if len ( self . text ) < ( 50 - 3 ) else self . text [ : 50 ] + " ... "
return force_unicode ( uryvek )
@reversion . register ( ignore_duplicate_revisions = True )
class Prispevek ( SeminarModelBase ) :
problem = models . ForeignKey ( Problem , verbose_name = ' Problém ' ) # TODO autokompleet
nazev = models . CharField ( ' Název ' , max_length = 200 )
reseni = models . OneToOneField ( Reseni , verbose_name = ' Řešení ' ,
blank = True , null = True )
text_org = models . TextField ( ' Orgovský text ' , blank = True , null = True )
text_resitel = models . TextField ( ' Řešitelský text ' , blank = True , null = True )
zverejnit = models . BooleanField ( ' Zveřejnit? ' )
class Meta :
verbose_name = ' Příspěvek k problému '
verbose_name_plural = ' Příspěvky k problémům '
def __unicode__ ( self ) :
if self . reseni :
return force_unicode ( self . nazev ) + ' ( ' + \
force_unicode ( self . reseni . resitel ) + ' ) <Problem: ' + \
force_unicode ( self . problem ) + ' > '
else :
return force_unicode ( self . nazev ) + ' <Problem: ' + \
force_unicode ( self . problem ) + ' > '
@reversion . register ( ignore_duplicate_revisions = True )
@python_2_unicode_compatible
class Organizator ( models . Model ) :
@ -736,69 +821,70 @@ class Soustredeni_Organizatori(models.Model):
#@reversion.register(ignore_duplicate_revisions=True)
#@python_2_unicode_compatible
#class Konfera(models.Model):
# class Meta:
# db_table = 'seminar_konfera'
# verbose_name = u'Konfera'
# verbose_name_plural = u'Konfery'
# # Interní ID
# id = models.AutoField(primary_key = True)
# nazev = models.CharField(u'název konfery', max_length=40, help_text = u'Název konfery')
# popis = models.TextField(u'popis konfery', blank=True,
# help_text=u'Popis konfery k zobrazení na webu')
# abstrakt = models.TextField(u'abstrakt', blank=True,
# help_text=u'Abstrakt konfery tak, jak byl uveden ve sborníku')
# organizator = models.ForeignKey(Organizator, verbose_name=u'organizátor', related_name='konfery',
# on_delete = models.SET_NULL, null=True)
# ucastnici = models.ManyToManyField(Resitel, verbose_name=u'účastníci konfery',
# help_text=u'Seznam účastníků konfery', through='Konfery_Ucastnici')
# soustredeni = models.ForeignKey(Soustredeni, verbose_name=u'soustředění', related_name='konfery',
# on_delete = models.SET_NULL, null=True)
# org_poznamka = models.TextField(u'neveřejná poznámka', blank=True,
# help_text=u'Neveřejná poznámka ke konfeře(plain text)')
# #prispevek #TODO
# TYP_VELETRH = 'veletrh'
# TYP_PREZENTACE = 'prezentace'
# TYP_CHOICES = [
# (TYP_VELETRH, u'Veletrh (postery)'),
# (TYP_PREZENTACE, u'Prezentace (přednáška)'),
# ]
# typ_prezentace = models.CharField(u'typ prezentace', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_VELETRH)
# prezentace = models.FileField(u'prezentace',help_text = u'Prezentace nebo fotka posteru',
# upload_to = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR))
# materialy = models.FileField(u'materialy',help_text = u'Další materiály ke konfeře zabalené do jednoho souboru',
# upload_to = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR))
#
# def __str__(self):
# return force_unicode(u"%s: (%s)" % (self.nazev, self.soustredeni))
#
#
#
#@reversion.register(ignore_duplicate_revisions=True)
#@python_2_unicode_compatible
#class Konfery_Ucastnici(models.Model):
#
# class Meta:
# db_table = 'seminar_konfery_ucastnici'
# verbose_name = u'Účast na konfeře'
# verbose_name_plural = u'Účasti na konfeře'
# ordering = ['konfera', 'resitel']
#
# # Interní ID
# id = models.AutoField(primary_key = True)
#
# resitel = models.ForeignKey(Resitel, verbose_name=u'řešitel')
#
# konfera = models.ForeignKey(Konfera, verbose_name=u'konfera')
#
# poznamka = models.TextField(u'neveřejná poznámka', blank=True,
# help_text=u'Neveřejná poznámka k účasti (plain text)')
#
# def __str__(self):
# return force_unicode(u'%s na %s' % (self.resitel, self.konfera, ))
# # NOTE: Poteciální DB HOG bez select_related
@reversion . register ( ignore_duplicate_revisions = True )
@python_2_unicode_compatible
class Konfera ( models . Model ) :
class Meta :
db_table = ' seminar_konfera '
verbose_name = u ' Konfera '
verbose_name_plural = u ' Konfery '
# Interní ID
id = models . AutoField ( primary_key = True )
nazev = models . CharField ( u ' název konfery ' , max_length = 40 , help_text = u ' Název konfery ' )
popis = models . TextField ( u ' popis konfery ' , blank = True ,
help_text = u ' Popis konfery k zobrazení na webu ' )
abstrakt = models . TextField ( u ' abstrakt ' , blank = True ,
help_text = u ' Abstrakt konfery tak, jak byl uveden ve sborníku ' )
organizator = models . ForeignKey ( Organizator , verbose_name = u ' organizátor ' , related_name = ' konfery ' ,
on_delete = models . SET_NULL , null = True )
ucastnici = models . ManyToManyField ( Resitel , verbose_name = u ' účastníci konfery ' ,
help_text = u ' Seznam účastníků konfery ' , through = ' Konfery_Ucastnici ' )
soustredeni = models . ForeignKey ( Soustredeni , verbose_name = u ' soustředění ' , related_name = ' konfery ' ,
on_delete = models . SET_NULL , null = True )
org_poznamka = models . TextField ( u ' neveřejná poznámka ' , blank = True ,
help_text = u ' Neveřejná poznámka ke konfeře(plain text) ' )
prispevek = models . ForeignKey ( Problem , verbose_name = u ' příspěvek do čísla ' , related_name = ' konfery ' ,
help_text = u ' Účastnický přípěvek o konfeře ' , on_delete = models . SET_NULL , null = True )
TYP_VELETRH = ' veletrh '
TYP_PREZENTACE = ' prezentace '
TYP_CHOICES = [
( TYP_VELETRH , u ' Veletrh (postery) ' ) ,
( TYP_PREZENTACE , u ' Prezentace (přednáška) ' ) ,
]
typ_prezentace = models . CharField ( u ' typ prezentace ' , max_length = 16 , choices = TYP_CHOICES , blank = False , default = TYP_VELETRH )
prezentace = models . FileField ( u ' prezentace ' , help_text = u ' Prezentace nebo fotka posteru ' ,
upload_to = generate_filename_konfera )
materialy = models . FileField ( u ' materialy ' , help_text = u ' Další materiály ke konfeře zabalené do jednoho souboru ' ,
upload_to = generate_filename_konfera )
def __str__ ( self ) :
return force_unicode ( u " %s : ( %s ) " % ( self . nazev , self . soustredeni ) )
@reversion . register ( ignore_duplicate_revisions = True )
@python_2_unicode_compatible
class Konfery_Ucastnici ( models . Model ) :
class Meta :
db_table = ' seminar_konfery_ucastnici '
verbose_name = u ' Účast na konfeře '
verbose_name_plural = u ' Účasti na konfeře '
ordering = [ ' konfera ' , ' resitel ' ]
# Interní ID
id = models . AutoField ( primary_key = True )
resitel = models . ForeignKey ( Resitel , verbose_name = u ' řešitel ' )
konfera = models . ForeignKey ( Konfera , verbose_name = u ' konfera ' )
poznamka = models . TextField ( u ' neveřejná poznámka ' , blank = True ,
help_text = u ' Neveřejná poznámka k účasti (plain text) ' )
def __str__ ( self ) :
return force_unicode ( u ' %s na %s ' % ( self . resitel , self . konfera , ) )
# NOTE: Poteciální DB HOG bez select_related
@python_2_unicode_compatible