Web M&M
https://mam.matfyz.cz
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.0 KiB
76 lines
2.0 KiB
# -*- coding: utf-8 -*-
|
|
import logging
|
|
import os
|
|
from django.db import models
|
|
from django.core.files.storage import FileSystemStorage
|
|
|
|
from .base import SeminarModelBase
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Text(SeminarModelBase):
|
|
class Meta:
|
|
db_table = 'seminar_texty'
|
|
verbose_name = 'text'
|
|
verbose_name_plural = 'texty'
|
|
|
|
na_web = models.TextField(
|
|
'text na web', blank=True,
|
|
help_text='Text ke zveřejnění na webu')
|
|
|
|
do_cisla = models.TextField(
|
|
'text do čísla', blank=True,
|
|
help_text='Text ke zveřejnění v čísle')
|
|
|
|
# má OneToOneField s:
|
|
# Reseni (je u něj jako reseni_cele)
|
|
|
|
# obrázky mají návaznost opačným směrem (vazba z druhé strany)
|
|
|
|
def save(self, *args, **kwargs):
|
|
super().save(*args, **kwargs)
|
|
# *Node.save() aktualizuje název *Nodu.
|
|
for tn in self.textnode_set.all():
|
|
tn.save()
|
|
|
|
def __str__(self):
|
|
return str(self.na_web)[:20]
|
|
|
|
|
|
class Obrazek(SeminarModelBase):
|
|
class Meta:
|
|
db_table = 'seminar_obrazky'
|
|
verbose_name = 'obrázek'
|
|
verbose_name_plural = 'obrázky'
|
|
|
|
# Interní ID
|
|
id = models.AutoField(primary_key=True)
|
|
|
|
na_web = models.ImageField(
|
|
'obrázek na web', upload_to='obrazky/%Y/%m/%d/',
|
|
null=True, blank=True)
|
|
|
|
text = models.ForeignKey(
|
|
Text, verbose_name='text',
|
|
help_text='text, ve kterém se obrázek vyskytuje',
|
|
null=False, blank=False, on_delete=models.CASCADE)
|
|
|
|
do_cisla_barevny = models.FileField(
|
|
'barevný obrázek do čísla',
|
|
help_text='Barevná verze obrázku do čísla',
|
|
upload_to='obrazky/%Y/%m/%d/', blank=True, null=True)
|
|
|
|
do_cisla_cernobily = models.FileField(
|
|
'černobílý obrázek do čísla',
|
|
help_text='Černobílá verze obrázku do čísla',
|
|
upload_to='obrazky/%Y/%m/%d/', blank=True, null=True)
|
|
|
|
# TODO placement hint - chci ho tady / pred textem / za textem
|
|
|
|
|
|
class OverwriteStorage(FileSystemStorage):
|
|
def get_available_name(self,name, max_length=None):
|
|
if self.exists(name):
|
|
os.remove(os.path.join(self.location,name))
|
|
return super().get_available_name(name,max_length)
|
|
|