Models: Dneska jsme zase překopali model. Už zase nám dává smysl
This commit is contained in:
parent
2a347d988f
commit
0ee4ac877e
1 changed files with 21 additions and 71 deletions
|
@ -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…
Reference in a new issue