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}"