105 lines
3.8 KiB
Python
105 lines
3.8 KiB
Python
from django.db import models
|
|
|
|
from soustredeni.models import Soustredeni
|
|
from personalni.models import Organizator, Osoba
|
|
|
|
|
|
class Seznam(models.Model):
|
|
class Meta:
|
|
db_table = "prednasky_seznam"
|
|
verbose_name = "Seznam přednášek"
|
|
verbose_name_plural = "Seznamy přednášek"
|
|
ordering = ["soustredeni", "stav"]
|
|
|
|
class Stav(models.IntegerChoices):
|
|
NAVRH = 1, "Návrh"
|
|
BUDE = 2, "Bude"
|
|
|
|
id = models.AutoField(primary_key=True)
|
|
soustredeni = models.ForeignKey(Soustredeni, null=True, default=None, on_delete=models.PROTECT)
|
|
stav = models.IntegerField("Stav", choices=Stav.choices, default=Stav.NAVRH)
|
|
|
|
def __str__(self):
|
|
return f"Seznam {"návrhů " if self.stav == Seznam.Stav.NAVRH else ""}přednášek na {self.soustredeni}"
|
|
|
|
|
|
class Prednaska(models.Model):
|
|
class Meta:
|
|
db_table = "prednasky_prednaska"
|
|
verbose_name = "Přednáška"
|
|
verbose_name_plural = "Přednášky"
|
|
ordering = ["org", "nazev"]
|
|
|
|
class Obtiznost(models.IntegerChoices):
|
|
LEHKA = 1, "Lehká"
|
|
STREDNI = 2, "Střední"
|
|
TEZKA = 3, "Těžká"
|
|
|
|
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í")
|
|
obtiznost = models.IntegerField("Obtížnost", choices=Obtiznost.choices)
|
|
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)
|
|
seznamy = models.ManyToManyField(Seznam)
|
|
|
|
def __str__(self):
|
|
return f"{self.nazev} ({self.org})"
|
|
|
|
|
|
class Hlasovani(models.Model):
|
|
class Meta:
|
|
db_table = "prednasky_hlasovani"
|
|
verbose_name = "Hlasování"
|
|
verbose_name_plural = "Hlasování"
|
|
ordering = ["ucastnik", "prednaska"]
|
|
|
|
class Body(models.IntegerChoices):
|
|
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)
|
|
body = models.IntegerField("Body", default=Body.JEDNO, choices=Body.choices)
|
|
|
|
# (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
|
|
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}"
|
|
|
|
|
|
class Znalost(models.Model):
|
|
class Meta:
|
|
db_table = "prednasky_znalost"
|
|
verbose_name = "Znalost k přednáškám"
|
|
verbose_name_plural = "Znalosti k přednáškám"
|
|
|
|
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")
|
|
seznamy = models.ManyToManyField(Seznam)
|
|
|
|
def __str__(self):
|
|
return self.nazev
|
|
|
|
|
|
class HlasovaniOZnalostech(models.Model):
|
|
class Odpoved(models.IntegerChoices):
|
|
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"
|
|
|
|
odpoved = models.CharField(u"odpověď", max_length=16, choices=Odpoved.choices, blank=False, null=False)
|
|
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)
|
|
|
|
def __str__(self):
|
|
return f"{self.ucastnik} dal {self.znalost} bodů {self.znalost} v seznamu {self.seznam}"
|
|
|