2016-04-17 23:48:39 +02:00
from django . db import models
2016-09-29 03:59:28 +02:00
2024-05-01 15:37:54 +02:00
from soustredeni . models import Soustredeni
2025-01-24 15:13:37 +01:00
from personalni . models import Organizator , Osoba
2016-09-29 01:19:35 +02:00
2016-09-29 01:54:22 +02:00
class Seznam ( models . Model ) :
2025-01-29 01:05:08 +01:00
"""
Spojuje : py : class : ` Přednášky < prednasky . models . Prednaska > `
se : py : class : ` Soustředěními < soustredeni . models . Soustredeni > ` ,
kde by mohly zaznít , nebo zazní / zazněly .
"""
2019-04-16 22:18:49 +02:00
class Meta :
2025-01-24 15:39:37 +01:00
db_table = " prednasky_seznam "
verbose_name = " Seznam přednášek "
verbose_name_plural = " Seznamy přednášek "
ordering = [ " soustredeni " , " stav " ]
2016-09-29 01:54:22 +02:00
2025-01-24 15:36:33 +01:00
class Stav ( models . IntegerChoices ) :
2025-01-29 01:05:08 +01:00
""" Stav seznamu přednášek (NAVRH se používá k hlasování viz :py:func:`daný view <prednasky.views.newPrednaska>`). """
2025-01-24 15:36:33 +01:00
NAVRH = 1 , " Návrh "
BUDE = 2 , " Bude "
2025-01-24 15:39:37 +01:00
id = models . AutoField ( primary_key = True )
soustredeni = models . ForeignKey ( Soustredeni , null = True , default = None , on_delete = models . PROTECT )
2025-01-29 01:05:08 +01:00
stav = models . IntegerField ( " Stav " , choices = Stav . choices , default = Stav . NAVRH ) #: :py:class:`Stav <prednasky.models.Seznam.Stav>` Seznamu
2016-09-29 03:59:28 +02:00
2019-04-16 22:18:49 +02:00
def __str__ ( self ) :
2025-01-24 20:42:44 +01:00
return f " Seznam { ' návrhů ' if self . stav == Seznam . Stav . NAVRH else ' ' } přednášek na { self . soustredeni } "
2025-01-24 15:39:37 +01:00
2016-04-17 23:48:39 +02:00
class Prednaska ( models . Model ) :
2025-01-29 01:05:08 +01:00
"""
Reprezentuje přednášku , kterou si org může vypsat a účastník o ní hlasovat .
( Viz : py : class : ` Hlasování < prednasky . models . Hlasovani > ` . )
"""
2019-04-16 22:18:49 +02:00
class Meta :
2025-01-24 15:39:37 +01:00
db_table = " prednasky_prednaska "
verbose_name = " Přednáška "
verbose_name_plural = " Přednášky "
ordering = [ " org " , " nazev " ]
2019-04-16 22:18:49 +02:00
2025-01-24 15:36:33 +01:00
class Obtiznost ( models . IntegerChoices ) :
LEHKA = 1 , " Lehká "
STREDNI = 2 , " Střední "
TEZKA = 3 , " Těžká "
2025-01-24 15:39:37 +01:00
id = models . AutoField ( primary_key = True )
nazev = models . CharField ( " Název " , max_length = 300 )
org = models . ForeignKey ( Organizator , on_delete = models . PROTECT )
popis = models . TextField ( " Popis pro orgy " , null = True , blank = True , help_text = " Neveřejný popis pro ostatní orgy " )
anotace = models . TextField ( " Anotace " , null = True , blank = True , help_text = " Veřejná anotace v hlasování " )
2025-01-29 01:05:08 +01:00
obtiznost = models . IntegerField ( " Obtížnost " , choices = Obtiznost . choices ) #: :py:class:`Obtížnost <prednasky.models.Prednaska.Obtiznost>` Přednášky
2025-01-24 15:39:37 +01:00
obor = models . CharField ( " Obor " , max_length = 5 , help_text = " Podmnožina MFIOB " )
klicova = models . CharField ( " Klíčová slova " , max_length = 200 , null = True , blank = True )
2019-04-16 22:18:49 +02:00
seznamy = models . ManyToManyField ( Seznam )
def __str__ ( self ) :
2025-01-24 15:39:37 +01:00
return f " { self . nazev } ( { self . org } ) "
class Hlasovani ( models . Model ) :
2025-01-29 01:05:08 +01:00
"""
Reprezentuje hlasování jednoho účastníka
o jedné : py : class : ` Přednášce < prednasky . models . Prednaska > `
v jednom : py : class : ` Seznamu < prednasky . models . Seznam > ` ( účastníkův pohled se totiž mezi sousy změnit )
"""
2025-01-24 15:39:37 +01:00
class Meta :
db_table = " prednasky_hlasovani "
verbose_name = " Hlasování "
verbose_name_plural = " Hlasování "
ordering = [ " ucastnik " , " prednaska " ]
class Body ( models . IntegerChoices ) :
2025-01-29 01:05:08 +01:00
""" Ohodnocení přednášky v daném Hlasování (větší číslo = víc chci) """
2025-01-24 15:39:37 +01:00
NECHCI = - 1 , " rozhodně nechci "
JEDNO = 0 , " je mi to jedno "
CHCI = 1 , " rozhodně chci "
id = models . AutoField ( primary_key = True )
prednaska = models . ForeignKey ( Prednaska , on_delete = models . CASCADE )
2025-01-29 01:05:08 +01:00
#: Příslušné hlasování: :py:class:`Body <prednasky.models.Hlasovani.Body>`
2025-01-24 15:39:37 +01:00
body = models . IntegerField ( " Body " , default = Body . JEDNO , choices = Body . choices )
2025-01-24 19:40:54 +01:00
2025-01-29 01:05:08 +01:00
#: Účastník, který hlasoval. Pouze string:
#: *(přechod z jména na objekt Osoby nějak kape na tom,
#: že všechna předchozí hlasování zde mají náhodný string…)
#: TODO Změnit to na Osobu*
2025-01-24 15:39:37 +01:00
ucastnik = models . CharField ( " Účastník " , max_length = 100 )
seznam = models . ForeignKey ( Seznam , null = True , on_delete = models . SET_NULL )
def __str__ ( self ) :
return f " { self . ucastnik } dal { self . body } bodů { self . prednaska } v seznamu { self . seznam } "
2016-09-29 01:19:35 +02:00
2016-04-17 23:48:39 +02:00
2025-01-24 15:13:37 +01:00
class Znalost ( models . Model ) :
2025-01-29 01:05:08 +01:00
"""
Reprezentuje znalost , na kterou se můžeme účastníka ptát ( nechat je hlasovat ) .
( Viz : py : class : ` HlasováníOZnalostech < prednasky . models . HlasovaniOZnalostech > ` . )
"""
2025-01-24 15:13:37 +01:00
class Meta :
2025-01-24 15:39:37 +01:00
db_table = " prednasky_znalost "
verbose_name = " Znalost k přednáškám "
verbose_name_plural = " Znalosti k přednáškám "
2025-01-24 15:13:37 +01:00
2025-01-24 15:39:37 +01:00
nazev = models . CharField ( " Nadpis " , max_length = 200 , blank = False , null = False , help_text = " Např. Neuronové sítě " )
text = models . TextField ( " Detailní popis " , blank = True , null = True , help_text = " Např. Perceptron, vrstevnatá síť, forward a backward propagation " )
2025-01-24 15:13:37 +01:00
seznamy = models . ManyToManyField ( Seznam )
def __str__ ( self ) :
return self . nazev
class HlasovaniOZnalostech ( models . Model ) :
2025-01-29 01:05:08 +01:00
"""
Reprezentuje hlasování jednoho účastníka
o jedné : py : class : ` Znalosti < prednasky . models . Znalost > `
v jednom : py : class : ` Seznamu < prednasky . models . Seznam > ` ( účastníkův pohled se totiž mezi sousy změnit )
"""
2025-01-24 16:01:39 +01:00
class Odpoved ( models . IntegerChoices ) :
2025-01-24 15:39:37 +01:00
UMIM = - 1 , " Tohle celkem umím "
CIRCA = 0 , " Už jsem o tom slyšel, ale neřekl bychm, že to úplně umím "
NEUMIM = 1 , " Tohle vůbec neznám "
2025-01-24 15:13:37 +01:00
2025-01-29 01:05:08 +01:00
odpoved = models . CharField ( u " odpověď " , max_length = 16 , choices = Odpoved . choices , blank = False , null = False ) #: :py:class:`Odpověď <prednasky.models.Prednaska.Odpoved>` na HlasováníOZnalostech
2025-01-24 15:13:37 +01:00
znalost = models . ForeignKey ( Znalost , on_delete = models . CASCADE , blank = False , null = False )
ucastnik = models . ForeignKey ( Osoba , on_delete = models . CASCADE , blank = False , null = False )
seznam = models . ForeignKey ( Seznam , on_delete = models . SET_NULL , blank = True , null = True )
2025-01-24 15:51:06 +01:00
def __str__ ( self ) :
return f " { self . ucastnik } dal { self . znalost } bodů { self . znalost } v seznamu { self . seznam } "