mamweb/prednasky/models.py

101 lines
3.7 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)
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}"