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 = 'Článek'
|
||||||
verbose_name_plural = 'Články'
|
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):
|
def kod_v_rocniku(self):
|
||||||
if self.stav == 'zadany':
|
if self.stav == 'zadany':
|
||||||
# Nemělo by být potřeba
|
# Nemělo by být potřeba
|
||||||
|
@ -767,15 +759,6 @@ class Clanek(Problem):
|
||||||
return "c{}".format(self.kod)
|
return "c{}".format(self.kod)
|
||||||
return '<Není zadaný>'
|
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 Text(SeminarModelBase):
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'seminar_texty'
|
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,
|
forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False,
|
||||||
default=FORMA_EMAIL)
|
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",
|
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,
|
poznamka = models.TextField('neveřejná poznámka', blank=True,
|
||||||
help_text='Neveřejná poznámka k řešení (plain text)')
|
help_text='Neveřejná poznámka k řešení (plain text)')
|
||||||
|
|
||||||
|
@ -1100,7 +1080,7 @@ class Soustredeni_Organizatori(SeminarModelBase):
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(ignore_duplicates=True)
|
@reversion.register(ignore_duplicates=True)
|
||||||
class Konfera(models.Model):
|
class Konfera(Problem):
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'seminar_konfera'
|
db_table = 'seminar_konfera'
|
||||||
verbose_name = 'Konfera'
|
verbose_name = 'Konfera'
|
||||||
|
@ -1108,17 +1088,12 @@ class Konfera(models.Model):
|
||||||
# Interní ID
|
# Interní ID
|
||||||
id = models.AutoField(primary_key = True)
|
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,
|
anotace = models.TextField('anotace', blank=True,
|
||||||
help_text='Popis, o čem bude konfera.')
|
help_text='Popis, o čem bude konfera.')
|
||||||
|
|
||||||
abstrakt = models.TextField('abstrakt', blank=True,
|
abstrakt = models.TextField('abstrakt', blank=True,
|
||||||
help_text='Abstrakt konfery tak, jak byl uveden ve sborníku')
|
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?
|
# FIXME: Umíme omezit jen na účastníky daného soustřeďka?
|
||||||
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery',
|
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery',
|
||||||
help_text='Seznam účastníků konfery', through='Konfery_Ucastnici')
|
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í',
|
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',
|
||||||
related_name='konfery', on_delete = models.SET_NULL, null=True)
|
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_VELETRH = 'veletrh'
|
||||||
TYP_PREZENTACE = 'prezentace'
|
TYP_PREZENTACE = 'prezentace'
|
||||||
TYP_CHOICES = [
|
TYP_CHOICES = [
|
||||||
|
@ -1149,21 +1117,9 @@ class Konfera(models.Model):
|
||||||
help_text = 'Další materiály ke konfeře zabalené do jednoho souboru',
|
help_text = 'Další materiály ke konfeře zabalené do jednoho souboru',
|
||||||
upload_to = generate_filename_konfera, blank=True)
|
upload_to = generate_filename_konfera, blank=True)
|
||||||
|
|
||||||
# má OneToOneField s:
|
|
||||||
# KonferaNode
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{}: ({})".format(self.nazev, self.soustredeni)
|
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.
|
# Vazebna tabulka. Mozna se generuje automaticky.
|
||||||
@reversion.register(ignore_duplicates=True)
|
@reversion.register(ignore_duplicates=True)
|
||||||
|
@ -1376,36 +1332,30 @@ class TemaVCisleNode(TreeNode):
|
||||||
def getOdkazStr(self):
|
def getOdkazStr(self):
|
||||||
return str(self.tema)
|
return str(self.tema)
|
||||||
|
|
||||||
class KonferaNode(TreeNode):
|
class OrgTextNode(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 Meta:
|
class Meta:
|
||||||
db_table = 'seminar_nodes_clanek'
|
db_table = 'seminar_nodes_clanek'
|
||||||
verbose_name = 'Článek (Node)'
|
verbose_name = 'Článek (Node)'
|
||||||
verbose_name_plural = 'Články (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ě
|
organizator = models.ForeignKey(Organizator,
|
||||||
verbose_name = "článek",
|
null=False,
|
||||||
null=True,
|
blank=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):
|
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):
|
# FIXME!!!
|
||||||
return str(self.clanek)
|
#def getOdkazStr(self):
|
||||||
|
# return str(self.clanek)
|
||||||
|
|
||||||
|
|
||||||
class UlohaZadaniNode(TreeNode):
|
class UlohaZadaniNode(TreeNode):
|
||||||
|
@ -1486,7 +1436,7 @@ class CastNode(TreeNode):
|
||||||
def getOdkazStr(self):
|
def getOdkazStr(self):
|
||||||
return str(self.nadpis)
|
return str(self.nadpis)
|
||||||
|
|
||||||
class OtisteneReseniNode(TreeNode):
|
class ReseniNode(TreeNode):
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'seminar_nodes_otistene_reseni'
|
db_table = 'seminar_nodes_otistene_reseni'
|
||||||
verbose_name = 'Otištěné řešení (Node)'
|
verbose_name = 'Otištěné řešení (Node)'
|
||||||
|
|
Loading…
Reference in a new issue