Compare commits
No commits in common. "9b14e4a333380a6a7d8550a05f858b490c55a95a" and "007332804e7d26838434a352bff0cf84273df656" have entirely different histories.
9b14e4a333
...
007332804e
27 changed files with 95 additions and 747 deletions
|
@ -5,4 +5,5 @@ set -exuo pipefail
|
|||
|
||||
ensure_web_installed
|
||||
|
||||
./manage.py graph_models seminar | dot -Tpdf > schema_seminar.pdf
|
||||
./manage.py graph_models -a -g | dot -Tpdf > schema_all.pdf
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 19:45
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('odevzdavatko', '0006_tvorba_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:44
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('treenode', '0001_odstrel_treenode_create'),
|
||||
('odevzdavatko', '0007_odstrel_treenode_pre'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='reseni',
|
||||
name='text_cely',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='reseni_cely_set', to='treenode.reseninode', verbose_name='Plná verze textu řešení'),
|
||||
),
|
||||
]
|
|
@ -1,14 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:52
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('odevzdavatko', '0008_odstrel_treenode_relink'),
|
||||
('treenode', '0003_odstrel_treenode_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -49,7 +49,7 @@ class Reseni(bm.SeminarModelBase):
|
|||
forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False,
|
||||
default=FORMA_EMAIL)
|
||||
|
||||
text_cely = models.OneToOneField('treenode.ReseniNode', verbose_name='Plná verze textu řešení',
|
||||
text_cely = models.OneToOneField('seminar.ReseniNode', verbose_name='Plná verze textu řešení',
|
||||
blank=True, null=True, related_name="reseni_cely_set",
|
||||
on_delete=models.PROTECT)
|
||||
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 19:45
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('personalni', '0015_tvorba_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -1,14 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:52
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('personalni', '0016_odstrel_treenode_pre'),
|
||||
('treenode', '0003_odstrel_treenode_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -1,17 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 19:45
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('seminar', '0139_tvorba_post'),
|
||||
('odevzdavatko', '0007_odstrel_treenode_pre'),
|
||||
('personalni', '0016_odstrel_treenode_pre'),
|
||||
('tvorba', '0004_odstrel_treenode_pre'),
|
||||
('contenttypes', '0002_remove_content_type_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -1,69 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 19:56
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('seminar', '0140_odstrel_treenode_pre'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='castnode',
|
||||
options={'managed': False, 'verbose_name': 'Část (Node)', 'verbose_name_plural': 'Části (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='cislonode',
|
||||
options={'managed': False, 'verbose_name': 'Číslo (Node)', 'verbose_name_plural': 'Čísla (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='mezicislonode',
|
||||
options={'managed': False, 'verbose_name': 'Mezičíslo (Node)', 'verbose_name_plural': 'Mezičísla (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='obrazek',
|
||||
options={'managed': False, 'verbose_name': 'obrázek', 'verbose_name_plural': 'obrázky'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='orgtextnode',
|
||||
options={'managed': False, 'verbose_name': 'Organizátorský článek (Node)', 'verbose_name_plural': 'Organizátorské články (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='pohadkanode',
|
||||
options={'managed': False, 'verbose_name': 'Pohádka (Node)', 'verbose_name_plural': 'Pohádky (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='reseninode',
|
||||
options={'managed': False, 'verbose_name': 'Otištěné řešení (Node)', 'verbose_name_plural': 'Otištěná řešení (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='rocniknode',
|
||||
options={'managed': False, 'verbose_name': 'Ročník (Node)', 'verbose_name_plural': 'Ročníky (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='temavcislenode',
|
||||
options={'managed': False, 'verbose_name': 'Téma v čísle (Node)', 'verbose_name_plural': 'Témata v čísle (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='text',
|
||||
options={'managed': False, 'verbose_name': 'text', 'verbose_name_plural': 'texty'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='textnode',
|
||||
options={'managed': False, 'verbose_name': 'Text (Node)', 'verbose_name_plural': 'Text (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='treenode',
|
||||
options={'managed': False, 'verbose_name': 'TreeNode', 'verbose_name_plural': 'TreeNody'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='ulohavzoraknode',
|
||||
options={'managed': False, 'verbose_name': 'Vzorák úlohy (Node)', 'verbose_name_plural': 'Vzoráky úloh (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='ulohazadaninode',
|
||||
options={'managed': False, 'verbose_name': 'Zadání úlohy (Node)', 'verbose_name_plural': 'Zadání úloh (Node)'},
|
||||
),
|
||||
]
|
|
@ -1,153 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:47
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('seminar', '0141_odstrel_treenode_unmanage'),
|
||||
('odevzdavatko', '0008_odstrel_treenode_relink'),
|
||||
('treenode', '0001_odstrel_treenode_create'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='cislonode',
|
||||
name='cislo',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='cislonode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='mezicislonode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='obrazek',
|
||||
name='text',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='orgtextnode',
|
||||
name='organizator',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='orgtextnode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='pohadkanode',
|
||||
name='pohadka',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='pohadkanode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='reseninode',
|
||||
name='reseni',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='reseninode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='rocniknode',
|
||||
name='rocnik',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='rocniknode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='temavcislenode',
|
||||
name='tema',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='temavcislenode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='textnode',
|
||||
name='text',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='textnode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='treenode',
|
||||
name='first_child',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='treenode',
|
||||
name='polymorphic_ctype',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='treenode',
|
||||
name='root',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='treenode',
|
||||
name='succ',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='ulohavzoraknode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='ulohavzoraknode',
|
||||
name='uloha',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='ulohazadaninode',
|
||||
name='treenode_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='ulohazadaninode',
|
||||
name='uloha',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='CastNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='CisloNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='MezicisloNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Obrazek',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='OrgTextNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='PohadkaNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='ReseniNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='RocnikNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='TemaVCisleNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Text',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='TextNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='TreeNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='UlohaVzorakNode',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='UlohaZadaniNode',
|
||||
),
|
||||
]
|
|
@ -1,14 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:52
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('seminar', '0142_odstrel_treenode_delete'),
|
||||
('treenode', '0003_odstrel_treenode_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -1,5 +1,7 @@
|
|||
from .tvorba import *
|
||||
from .base import *
|
||||
from .pomocne import *
|
||||
from .treenode import *
|
||||
|
||||
from various.models import Nastaveni
|
||||
from personalni.models import Organizator, Resitel, Skola, Prijemce, Osoba
|
||||
|
@ -7,7 +9,6 @@ from soustredeni.models import Soustredeni, Soustredeni_Ucastnici, Soustredeni_O
|
|||
from novinky.models import Novinky
|
||||
from odevzdavatko.models import Reseni, PrilohaReseni, Reseni_Resitele, Hodnoceni
|
||||
from tvorba.models import ZmrazenaVysledkovka, Deadline, Cislo, Rocnik, Pohadka, Tema, Problem, Problemy_Opravovatele, Uloha, Clanek
|
||||
from treenode.models import UlohaVzorakNode, UlohaZadaniNode, CisloNode, TemaVCisleNode, OrgTextNode, Obrazek, RocnikNode, PohadkaNode, TextNode, MezicisloNode, ReseniNode, CastNode, Text, TreeNode
|
||||
|
||||
# Kvůli migr. 0041
|
||||
from soustredeni.models import generate_filename_konfera
|
||||
|
|
69
seminar/models/pomocne.py
Normal file
69
seminar/models/pomocne.py
Normal file
|
@ -0,0 +1,69 @@
|
|||
import logging
|
||||
import os
|
||||
from django.db import models
|
||||
|
||||
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
|
||||
|
||||
|
|
@ -8,11 +8,11 @@ from unidecode import unidecode # Používám pro získání ID odkazu (ještě
|
|||
|
||||
from polymorphic.models import PolymorphicModel
|
||||
|
||||
from seminar.models import SeminarModelBase
|
||||
|
||||
from personalni.models import Organizator
|
||||
from odevzdavatko.models import Reseni
|
||||
|
||||
from .pomocne import Text
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
import tvorba.models as am
|
||||
|
@ -234,48 +234,6 @@ class UlohaVzorakNode(TreeNode):
|
|||
def getOdkazStr(self):
|
||||
return str(self.uloha)
|
||||
|
||||
class ReseniNode(TreeNode):
|
||||
class Meta:
|
||||
db_table = 'seminar_nodes_otistene_reseni'
|
||||
verbose_name = 'Otištěné řešení (Node)'
|
||||
verbose_name_plural = 'Otištěná řešení (Node)'
|
||||
reseni = models.ForeignKey(Reseni,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name = 'reseni')
|
||||
|
||||
def aktualizuj_nazev(self):
|
||||
self.nazev = "ReseniNode: "+str(self.reseni)
|
||||
|
||||
def getOdkazStr(self):
|
||||
return str(self.reseni)
|
||||
|
||||
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 TextNode(TreeNode):
|
||||
class Meta:
|
||||
|
@ -292,6 +250,7 @@ class TextNode(TreeNode):
|
|||
def getOdkazStr(self):
|
||||
return str(self.text)
|
||||
|
||||
|
||||
class CastNode(TreeNode):
|
||||
class Meta:
|
||||
db_table = 'seminar_nodes_cast'
|
||||
|
@ -307,33 +266,17 @@ class CastNode(TreeNode):
|
|||
return str(self.nadpis)
|
||||
|
||||
|
||||
class Obrazek(SeminarModelBase):
|
||||
class ReseniNode(TreeNode):
|
||||
class Meta:
|
||||
db_table = 'seminar_obrazky'
|
||||
verbose_name = 'obrázek'
|
||||
verbose_name_plural = 'obrázky'
|
||||
db_table = 'seminar_nodes_otistene_reseni'
|
||||
verbose_name = 'Otištěné řešení (Node)'
|
||||
verbose_name_plural = 'Otištěná řešení (Node)'
|
||||
reseni = models.ForeignKey(Reseni,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name = 'reseni')
|
||||
|
||||
# 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
|
||||
def aktualizuj_nazev(self):
|
||||
self.nazev = "ReseniNode: "+str(self.reseni)
|
||||
|
||||
def getOdkazStr(self):
|
||||
return str(self.reseni)
|
|
@ -5,7 +5,7 @@ from django.forms import widgets
|
|||
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter
|
||||
|
||||
from .models import TreeNode, RocnikNode, CisloNode, MezicisloNode, TemaVCisleNode, UlohaZadaniNode, PohadkaNode, UlohaVzorakNode, TextNode, CastNode, OrgTextNode
|
||||
from .models import Text, Obrazek
|
||||
from .models.pomocne import Text, Obrazek
|
||||
|
||||
# Polymorfismus pro stromy
|
||||
# TODO: Inlines podle https://django-polymorphic.readthedocs.io/en/stable/admin.html
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django import forms
|
||||
from .models import Obrazek
|
||||
from .models.pomocne import Obrazek
|
||||
|
||||
# pro přidání políčka do formuláře je potřeba
|
||||
# - mít v modelu tu položku, kterou chci upravovat
|
||||
|
|
|
@ -1,231 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:06
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
def nastav_nove_contenttypes(apps, schema_editor):
|
||||
ContentType = apps.get_model('contenttypes', 'ContentType')
|
||||
# Seznam níž ověřen tím, že se skutečně při téhle migraci tabulka `django_content_type` (lokální v SQLite) změní správně :-)
|
||||
for m in ('ulohavzoraknode', 'ulohazadaninode', 'cislonode', 'temavcislenode', 'orgtextnode', 'obrazek', 'rocniknode', 'pohadkanode', 'textnode', 'mezicislonode', 'reseninode', 'castnode', 'text', 'treenode'):
|
||||
ContentType.objects.filter(app_label='seminar', model=m).update(app_label='treenode')
|
||||
|
||||
def nastav_stare_contenttypes(apps, schema_editor):
|
||||
ContentType = apps.get_model('contenttypes', 'ContentType')
|
||||
for m in ('ulohavzoraknode', 'ulohazadaninode', 'cislonode', 'temavcislenode', 'orgtextnode', 'obrazek', 'rocniknode', 'pohadkanode', 'textnode', 'mezicislonode', 'reseninode', 'castnode', 'text', 'treenode'):
|
||||
ContentType.objects.filter(app_label='treenode', model=m).update(app_label='seminar')
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('seminar', '0141_odstrel_treenode_unmanage'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Obrazek',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('na_web', models.ImageField(blank=True, null=True, upload_to='obrazky/%Y/%m/%d/', verbose_name='obrázek na web')),
|
||||
('do_cisla_barevny', models.FileField(blank=True, help_text='Barevná verze obrázku do čísla', null=True, upload_to='obrazky/%Y/%m/%d/', verbose_name='barevný obrázek do čísla')),
|
||||
('do_cisla_cernobily', models.FileField(blank=True, help_text='Černobílá verze obrázku do čísla', null=True, upload_to='obrazky/%Y/%m/%d/', verbose_name='černobílý obrázek do čísla')),
|
||||
('text', models.ForeignKey(help_text='text, ve kterém se obrázek vyskytuje', on_delete=django.db.models.deletion.CASCADE, to='treenode.text', verbose_name='text')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'obrázek',
|
||||
'verbose_name_plural': 'obrázky',
|
||||
'db_table': 'seminar_obrazky',
|
||||
'managed': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Text',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('na_web', models.TextField(blank=True, help_text='Text ke zveřejnění na webu', verbose_name='text na web')),
|
||||
('do_cisla', models.TextField(blank=True, help_text='Text ke zveřejnění v čísle', verbose_name='text do čísla')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'text',
|
||||
'verbose_name_plural': 'texty',
|
||||
'db_table': 'seminar_texty',
|
||||
'managed': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TreeNode',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nazev', models.TextField(help_text='Tento název se zobrazuje v nabídkách pro výběr vhodného TreeNode', null=True, verbose_name='název tohoto node')),
|
||||
('zajimave', models.BooleanField(default=False, help_text='Zobrazí se daná věc na rozcestníku témátek', verbose_name='Zajímavé')),
|
||||
('srolovatelne', models.BooleanField(blank=True, help_text='Bude na stránce témátka možnost tuto položku skrýt', null=True, verbose_name='Srolovatelné')),
|
||||
('first_child', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='father_of_first', to='treenode.treenode', verbose_name='první potomek')),
|
||||
('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype')),
|
||||
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='treenode.treenode', verbose_name='kořen stromu')),
|
||||
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='treenode.treenode', verbose_name='další element na stejné úrovni')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'TreeNode',
|
||||
'verbose_name_plural': 'TreeNody',
|
||||
'db_table': 'seminar_nodes_treenode',
|
||||
'managed': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CastNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('nadpis', models.CharField(help_text='Nadpis podvěšené části obsahu', max_length=100, verbose_name='Nadpis')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Část (Node)',
|
||||
'verbose_name_plural': 'Části (Node)',
|
||||
'db_table': 'seminar_nodes_cast',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CisloNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('cislo', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='tvorba.cislo', verbose_name='číslo')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Číslo (Node)',
|
||||
'verbose_name_plural': 'Čísla (Node)',
|
||||
'db_table': 'seminar_nodes_cislo',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='MezicisloNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Mezičíslo (Node)',
|
||||
'verbose_name_plural': 'Mezičísla (Node)',
|
||||
'db_table': 'seminar_nodes_mezicislo',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OrgTextNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('org_verejny', models.BooleanField(default=True, help_text='Pokud ano, bude org pod článkem podepsaný', verbose_name='Org je veřejný?')),
|
||||
('organizator', models.ForeignKey( on_delete=django.db.models.deletion.DO_NOTHING, to='personalni.organizator', verbose_name='Organizátor')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Organizátorský článek (Node)',
|
||||
'verbose_name_plural': 'Organizátorské články (Node)',
|
||||
'db_table': 'seminar_nodes_orgtextnode',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PohadkaNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('pohadka', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='tvorba.pohadka', verbose_name='pohádka')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Pohádka (Node)',
|
||||
'verbose_name_plural': 'Pohádky (Node)',
|
||||
'db_table': 'seminar_nodes_pohadka',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ReseniNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('reseni', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='odevzdavatko.reseni', verbose_name='reseni')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Otištěné řešení (Node)',
|
||||
'verbose_name_plural': 'Otištěná řešení (Node)',
|
||||
'db_table': 'seminar_nodes_otistene_reseni',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RocnikNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('rocnik', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='tvorba.rocnik', verbose_name='ročník')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ročník (Node)',
|
||||
'verbose_name_plural': 'Ročníky (Node)',
|
||||
'db_table': 'seminar_nodes_rocnik',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TemaVCisleNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('tema', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='tvorba.tema', verbose_name='téma v čísle')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Téma v čísle (Node)',
|
||||
'verbose_name_plural': 'Témata v čísle (Node)',
|
||||
'db_table': 'seminar_nodes_temavcisle',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TextNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('text', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='treenode.text', verbose_name='text')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Text (Node)',
|
||||
'verbose_name_plural': 'Text (Node)',
|
||||
'db_table': 'seminar_nodes_obsah',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UlohaVzorakNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('uloha', models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, to='tvorba.uloha', verbose_name='úloha')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Vzorák úlohy (Node)',
|
||||
'verbose_name_plural': 'Vzoráky úloh (Node)',
|
||||
'db_table': 'seminar_nodes_uloha_vzorak',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UlohaZadaniNode',
|
||||
fields=[
|
||||
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='treenode.treenode')),
|
||||
('uloha', models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, to='tvorba.uloha', verbose_name='úloha')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Zadání úlohy (Node)',
|
||||
'verbose_name_plural': 'Zadání úloh (Node)',
|
||||
'db_table': 'seminar_nodes_uloha_zadani',
|
||||
'managed': False,
|
||||
},
|
||||
bases=('treenode.treenode',),
|
||||
),
|
||||
migrations.RunPython(nastav_nove_contenttypes, nastav_stare_contenttypes),
|
||||
]
|
|
@ -1,70 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:50
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('treenode', '0001_odstrel_treenode_create'),
|
||||
('seminar', '0142_odstrel_treenode_delete'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='castnode',
|
||||
options={'verbose_name': 'Část (Node)', 'verbose_name_plural': 'Části (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='cislonode',
|
||||
options={'verbose_name': 'Číslo (Node)', 'verbose_name_plural': 'Čísla (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='mezicislonode',
|
||||
options={'verbose_name': 'Mezičíslo (Node)', 'verbose_name_plural': 'Mezičísla (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='obrazek',
|
||||
options={'verbose_name': 'obrázek', 'verbose_name_plural': 'obrázky'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='orgtextnode',
|
||||
options={'verbose_name': 'Organizátorský článek (Node)', 'verbose_name_plural': 'Organizátorské články (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='pohadkanode',
|
||||
options={'verbose_name': 'Pohádka (Node)', 'verbose_name_plural': 'Pohádky (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='reseninode',
|
||||
options={'verbose_name': 'Otištěné řešení (Node)', 'verbose_name_plural': 'Otištěná řešení (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='rocniknode',
|
||||
options={'verbose_name': 'Ročník (Node)', 'verbose_name_plural': 'Ročníky (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='temavcislenode',
|
||||
options={'verbose_name': 'Téma v čísle (Node)', 'verbose_name_plural': 'Témata v čísle (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='text',
|
||||
options={'verbose_name': 'text', 'verbose_name_plural': 'texty'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='textnode',
|
||||
options={'verbose_name': 'Text (Node)', 'verbose_name_plural': 'Text (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='treenode',
|
||||
options={'verbose_name': 'TreeNode', 'verbose_name_plural': 'TreeNody'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='ulohavzoraknode',
|
||||
options={'verbose_name': 'Vzorák úlohy (Node)', 'verbose_name_plural': 'Vzoráky úloh (Node)'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='ulohazadaninode',
|
||||
options={'verbose_name': 'Zadání úlohy (Node)', 'verbose_name_plural': 'Zadání úloh (Node)'},
|
||||
),
|
||||
]
|
|
@ -1,13 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:52
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('treenode', '0002_odstrel_treenode_manage'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
1
treenode/models/__init__.py
Normal file
1
treenode/models/__init__.py
Normal file
|
@ -0,0 +1 @@
|
|||
from seminar.models.treenode import *
|
1
treenode/models/pomocne.py
Normal file
1
treenode/models/pomocne.py
Normal file
|
@ -0,0 +1 @@
|
|||
from seminar.models.pomocne import *
|
|
@ -5,7 +5,7 @@ from odevzdavatko.models import Reseni
|
|||
from tvorba.models import Problem, Uloha
|
||||
|
||||
from .models import RocnikNode, CisloNode, MezicisloNode, TemaVCisleNode, OrgTextNode, PohadkaNode, TextNode, TreeNode, CastNode, UlohaZadaniNode, UlohaVzorakNode, ReseniNode
|
||||
from .models import Text
|
||||
from .models.pomocne import Text
|
||||
from treenode import treelib
|
||||
|
||||
DEFAULT_NODE_DEPTH = 2
|
||||
|
|
|
@ -7,7 +7,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
|
|||
from django.core.exceptions import PermissionDenied
|
||||
|
||||
from .models import TemaVCisleNode, RocnikNode, CisloNode, UlohaVzorakNode, UlohaZadaniNode, TreeNode, CastNode, TextNode, ReseniNode, PohadkaNode, OrgTextNode
|
||||
from .models import Text, Obrazek
|
||||
from .models.pomocne import Text, Obrazek
|
||||
from treenode import treelib
|
||||
import treenode.forms as f
|
||||
import treenode.templatetags as tnltt
|
||||
|
|
|
@ -8,7 +8,7 @@ from odevzdavatko.models import Reseni
|
|||
from tvorba.models import Problem, Uloha
|
||||
|
||||
from .models import TextNode, CastNode, UlohaVzorakNode, UlohaZadaniNode, ReseniNode
|
||||
from .models import Text
|
||||
from .models.pomocne import Text
|
||||
import treenode.serializers as views
|
||||
|
||||
from treenode.permissions import AllowWrite
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 19:45
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('tvorba', '0003_tvorba_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -1,14 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2024-11-02 20:52
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('tvorba', '0004_odstrel_treenode_pre'),
|
||||
('treenode', '0003_odstrel_treenode_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -11,7 +11,7 @@ from .models import Rocnik, Cislo, Deadline, Problem, Tema, Uloha, Clanek
|
|||
from odevzdavatko.models import Reseni, Hodnoceni
|
||||
# TODO zbavit se treenodů do treenode.testutils (ty pak klidně volat odtud)
|
||||
from treenode.models import TextNode, UlohaZadaniNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, CastNode, MezicisloNode, ReseniNode
|
||||
from treenode.models import Text
|
||||
from treenode.models.pomocne import Text
|
||||
|
||||
from treenode.treelib import all_children, insert_last_child, all_children_of_type, create_node_after
|
||||
|
||||
|
|
Loading…
Reference in a new issue