Browse Source

Models: Dneska jsme zase překopali model. Už zase nám dává smysl

middleware_test
Pavel 'LEdoian' Turinsky 5 years ago
parent
commit
0ee4ac877e
  1. 92
      seminar/models.py

92
seminar/models.py

@ -751,14 +751,6 @@ class Clanek(Problem):
verbose_name = 'Článek'
verbose_name_plural = 'Články'
cislo = models.ForeignKey(Cislo, verbose_name='číslo', blank=True, null=True,
on_delete=models.PROTECT)
resitelsky = models.BooleanField('Jde o řešitelský článek?', default=True)
# má OneToOneField s:
# ClanekNode
def kod_v_rocniku(self):
if self.stav == 'zadany':
# Nemělo by být potřeba
@ -767,15 +759,6 @@ class Clanek(Problem):
return "c{}".format(self.kod)
return '<Není zadaný>'
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
# *Node.save() aktualizuje název *Nodu.
try:
self.claneknode.save()
except ObjectDoesNotExist:
# Neexistující *Node nemá smysl aktualizovat.
pass
class Text(SeminarModelBase):
class Meta:
db_table = 'seminar_texty'
@ -885,13 +868,10 @@ class Reseni(SeminarModelBase):
forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False,
default=FORMA_EMAIL)
text_cely = models.OneToOneField(Text, verbose_name='Plná verze textu řešení',
text_cely = models.OneToOneField(ReseniNode, verbose_name='Plná verze textu řešení',
blank=True, null=True, related_name="reseni_cely_set",
on_delete=models.SET_NULL)
on_delete=models.PROTECT)
text_zkraceny = models.ManyToManyField(Text, verbose_name='zkrácené verze řešení',
help_text='Seznam úryvků z řešení',related_name="reseni_zkraceny_set")
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k řešení (plain text)')
@ -1100,7 +1080,7 @@ class Soustredeni_Organizatori(SeminarModelBase):
@reversion.register(ignore_duplicates=True)
class Konfera(models.Model):
class Konfera(Problem):
class Meta:
db_table = 'seminar_konfera'
verbose_name = 'Konfera'
@ -1108,17 +1088,12 @@ class Konfera(models.Model):
# Interní ID
id = models.AutoField(primary_key = True)
nazev = models.CharField('název konfery', max_length=100, help_text = 'Název konfery')
anotace = models.TextField('anotace', blank=True,
help_text='Popis, o čem bude konfera.')
abstrakt = models.TextField('abstrakt', blank=True,
help_text='Abstrakt konfery tak, jak byl uveden ve sborníku')
organizator = models.ForeignKey(Organizator, verbose_name='organizátor', related_name='konfery',
on_delete = models.SET_NULL, null=True)
# FIXME: Umíme omezit jen na účastníky daného soustřeďka?
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery',
help_text='Seznam účastníků konfery', through='Konfery_Ucastnici')
@ -1126,13 +1101,6 @@ class Konfera(models.Model):
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',
related_name='konfery', on_delete = models.SET_NULL, null=True)
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka ke konfeře(plain text)')
# Jedno reseni se vztahuje nejvyse k jedne konfere
reseni = models.OneToOneField(Reseni, verbose_name='článek ke konfeře', related_name='konfery',
help_text='Účastnický přípěvek o konfeře', on_delete = models.SET_NULL,
null=True, blank=True)
TYP_VELETRH = 'veletrh'
TYP_PREZENTACE = 'prezentace'
TYP_CHOICES = [
@ -1149,21 +1117,9 @@ class Konfera(models.Model):
help_text = 'Další materiály ke konfeře zabalené do jednoho souboru',
upload_to = generate_filename_konfera, blank=True)
# má OneToOneField s:
# KonferaNode
def __str__(self):
return "{}: ({})".format(self.nazev, self.soustredeni)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
# *Node.save() aktualizuje název *Nodu.
try:
self.konferanode.save()
except ObjectDoesNotExist:
# Neexistující *Node nemá smysl aktualizovat.
pass
# Vazebna tabulka. Mozna se generuje automaticky.
@reversion.register(ignore_duplicates=True)
@ -1376,36 +1332,30 @@ class TemaVCisleNode(TreeNode):
def getOdkazStr(self):
return str(self.tema)
class KonferaNode(TreeNode):
class Meta:
db_table = 'seminar_nodes_konfera'
verbose_name = 'Konfera (Node)'
verbose_name_plural = 'Konfery (Node)'
konfera = models.OneToOneField(Konfera,
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně
verbose_name = "konfera",
null=True,
blank=False)
def aktualizuj_nazev(self):
self.nazev = "KonferaNode: "+str(self.konfera)
class ClanekNode(TreeNode):
class OrgTextNode(TreeNode):
class Meta:
db_table = 'seminar_nodes_clanek'
verbose_name = 'Článek (Node)'
verbose_name_plural = 'Články (Node)'
clanek = models.OneToOneField(Clanek,
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně
verbose_name = "článek",
null=True,
blank=False)
organizator = models.ForeignKey(Organizator,
null=False,
blank=False,
on_delete=models.DO_NOTHING,
verbose_name="Organizátor",
)
org_verejny = models.BooleanField(default = True,
verbose_name = "Org je veřejný?",
help_text = "Pokud ano, bude org pod článkem podepsaný",
null=False,
)
def aktualizuj_nazev(self):
self.nazev = "ClanekNode: "+str(self.clanek)
return f"OrgTextNode začínající následujícim: {self.first_child.nazev}"
def getOdkazStr(self):
return str(self.clanek)
# FIXME!!!
#def getOdkazStr(self):
# return str(self.clanek)
class UlohaZadaniNode(TreeNode):
@ -1486,7 +1436,7 @@ class CastNode(TreeNode):
def getOdkazStr(self):
return str(self.nadpis)
class OtisteneReseniNode(TreeNode):
class ReseniNode(TreeNode):
class Meta:
db_table = 'seminar_nodes_otistene_reseni'
verbose_name = 'Otištěné řešení (Node)'

Loading…
Cancel
Save