import logging from django.db import models from django.utils.functional import cached_property from treenode import treelib from .problem import Problem from .rocnik import Rocnik class Tema(Problem): class Meta: db_table = 'seminar_temata' verbose_name = 'Téma' verbose_name_plural = 'Témata' TEMA_TEMA = 'tema' TEMA_SERIAL = 'serial' TEMA_CHOICES = [ (TEMA_TEMA, 'Téma'), (TEMA_SERIAL, 'Seriál'), ] tema_typ = models.CharField( 'Typ tématu', max_length=16, choices=TEMA_CHOICES, blank=False, default=TEMA_TEMA, ) rocnik = models.ForeignKey( Rocnik, verbose_name='ročník', related_name='temata', blank=True, null=True, on_delete=models.PROTECT, ) abstrakt = models.TextField('Abstrakt na rozcestník', blank=True) obrazek = models.ImageField('Obrázek na rozcestník', null=True, blank=True) @cached_property def kod_v_rocniku(self): if self.stav == Problem.STAV_ZADANY or self.stav == Problem.STAV_VYRESENY: if self.nadproblem: return self.nadproblem.kod_v_rocniku+".t{}".format(self.kod) return "t{}".format(self.kod) logger = logging.getLogger(__name__) logger.warning(f"K problému {self} byl vyžadován kód v ročníku, i když není zadaný ani vyřešený.") return '' def save(self, *args, **kwargs): super().save(*args, **kwargs) # *Node.save() aktualizuje název *Nodu. for tvcn in self.temavcislenode_set.all(): tvcn.save() def cislo_node(self): tema_node_set = self.temavcislenode_set.all() tema_cisla_vyskyt = [] from treenode.models import CisloNode for tn in tema_node_set: tema_cisla_vyskyt.append( treelib.get_upper_node_of_type(tn, CisloNode).cislo) tema_cisla_vyskyt.sort(key=lambda x: x.datum_vydani) prvni_zadani = tema_cisla_vyskyt[0] return prvni_zadani.cislonode