mamweb/soustredeni/models/konfera.py

83 lines
2.2 KiB
Python

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