import os from reversion import revisions as reversion from django.db import models from django.conf import settings from various.utils import aux_generate_filename from personalni.models.resitel import Resitel from tvorba.models.problem import Problem from .soustredeni import Soustredeni # Django neumí jednoduše serializovat partial nebo třídu s __call__ # (https://docs.djangoproject.com/en/1.8/topics/migrations/), # neprojdou pak migrace. Takže rozlišení funkcí generujících názvy souboru # podle adresáře řešíme takto. ## def generate_filename_konfera(self, filename): return os.path.join( settings.SEMINAR_KONFERY_DIR, aux_generate_filename(self, filename) ) ## @reversion.register(ignore_duplicates=True) class Konfera(Problem): class Meta: db_table = 'seminar_konfera' verbose_name = 'Konfera' verbose_name_plural = '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', ) # 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', ) soustredeni = models.ForeignKey( Soustredeni, verbose_name='soustředění', related_name='konfery', on_delete=models.SET_NULL, null=True, ) TYP_VELETRH = 'veletrh' TYP_PREZENTACE = 'prezentace' TYP_CHOICES = [ (TYP_VELETRH, 'Veletrh (postery)'), (TYP_PREZENTACE, 'Prezentace (přednáška)'), ] typ_prezentace = models.CharField( 'typ prezentace', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_VELETRH, ) prezentace = models.FileField( 'prezentace', help_text='Prezentace nebo fotka posteru', upload_to=generate_filename_konfera, blank=True, ) materialy = models.FileField( 'materialy', help_text='Další materiály ke konfeře zabalené do jednoho souboru', upload_to=generate_filename_konfera, blank=True, ) def __str__(self): return "{}: ({})".format(self.nazev, self.soustredeni) def cislo_node(self): return None