|
|
@ -4,11 +4,17 @@ from __future__ import unicode_literals |
|
|
|
|
|
|
|
from django.db import migrations |
|
|
|
|
|
|
|
from django.db.models import Q |
|
|
|
|
|
|
|
def pridej_potomka(rodic, potomek): |
|
|
|
# Daný vrchol bude posledním potomkem rodiče |
|
|
|
uz_ma_deti = False |
|
|
|
posledni = None |
|
|
|
|
|
|
|
# Přidávaný potomek by neměl mít následovníka -- přidáváme potomka, ne podles. |
|
|
|
if potomek.succ: |
|
|
|
raise ValueError("Potomek má následovníka, to je velmi podezřelé!") |
|
|
|
|
|
|
|
# Najdeme aktuálně posledního potomka: |
|
|
|
if rodic.first_child: |
|
|
|
uz_ma_deti = True |
|
|
@ -35,20 +41,65 @@ def pokacej_les(apps, schema_editor): |
|
|
|
# pak články a konfery, pak vzoráky, všechno setříděné podle kódu (FIXME?) |
|
|
|
|
|
|
|
# Kopírování je častým zdrojem chyb! |
|
|
|
CisloNode = apps.get_model('seminar', 'CisloNode') |
|
|
|
TemaVCisleNode = apps.get_model('seminar', 'TemaVCisleNode') |
|
|
|
KonferaNode = apps.get_model('seminar', 'KonferaNode') |
|
|
|
ClanekNode = apps.get_model('seminar', 'ClanekNode') |
|
|
|
UlohaZadaniNode = apps.get_model('seminar', 'UlohaZadaniNode') |
|
|
|
UlohaVzorakNode = apps.get_model('seminar', 'UlohaVzorakNode') |
|
|
|
Cislo = apps.get_model('seminar', 'Cislo') |
|
|
|
Tema = apps.get_model('seminar', 'Tema') |
|
|
|
Konfera = apps.get_model('seminar', 'Konfera') |
|
|
|
Clanek = apps.get_model('seminar', 'Clanek') |
|
|
|
Uloha = apps.get_model('seminar', 'Uloha') |
|
|
|
Problem = apps.get_model('seminar', 'Problem') |
|
|
|
Pohadka = apps.get_model('seminar', 'Pohadka') |
|
|
|
|
|
|
|
for c in Cislo.objects.all().reverse(): |
|
|
|
cnode = c.cislonode |
|
|
|
|
|
|
|
# Témata a seriály: |
|
|
|
relevantni_temata = Tema.objects.filter(Q(cislo_zadani = c) | Q(cislo_reseni = c)).order_by('kod'): |
|
|
|
# Téma dáme do prvního čísla, kde se vyskytne |
|
|
|
for t in relevantni_temata: |
|
|
|
tnode = t.temavcislenode |
|
|
|
if t.cislo_zadani and t.cislo_reseni: |
|
|
|
assert(t.cislo_zadani <= t.cislo_reseni) |
|
|
|
if t.cislo_reseni == c: |
|
|
|
# Už by mělo být přidané do čísla zadání |
|
|
|
continue |
|
|
|
else: |
|
|
|
# Patří sem (buď je to jediné číslo, nebo je to číslo zadání) |
|
|
|
pridej_potomka(cnode, tnode) |
|
|
|
|
|
|
|
# Úložky (zadání) a pohádky |
|
|
|
for u in Uloha.objects.filter(cislo_zadani = c).order_by('kod'): |
|
|
|
unode = u.ulohazadaninode |
|
|
|
pohadky_pred = Pohadka.objects.filter(uloha_old = u.problem, pred = True) |
|
|
|
pohadky_po = Pohadka.objects.filter(uloha_old = u.problem, pred = False) |
|
|
|
for p in pohadky_pred: |
|
|
|
# FIXME: Chceme pohádku do stromu? |
|
|
|
print('!!! !!! !!! !!! !!!') |
|
|
|
print('FIXME: Jak uložit pohádku??') |
|
|
|
print('!!! !!! !!! !!! !!!') |
|
|
|
pridej_potomka(cnode, unode) |
|
|
|
for p in pohadky_po: |
|
|
|
# FIXME: Chceme pohádku do stromu? |
|
|
|
print('!!! !!! !!! !!! !!!') |
|
|
|
print('FIXME: Jak uložit pohádku??') |
|
|
|
print('!!! !!! !!! !!! !!!') |
|
|
|
|
|
|
|
# Články |
|
|
|
for cl in Clanek.objects.filter(cislo = c).order_by('kod'): |
|
|
|
clnode = cl.claneknode |
|
|
|
pridej_potomka(cnode, clnode) |
|
|
|
|
|
|
|
# Konfery |
|
|
|
for k in Konfera.objects.all(): |
|
|
|
knode = k.konferanode |
|
|
|
if k.reseni and knode.root is None: |
|
|
|
# Takováhle konfera nejspíš neexistuje |
|
|
|
raise NotImplementedError("Konfery neumím zapojit do stromu") |
|
|
|
|
|
|
|
# Vzoráky |
|
|
|
for u in Uloha.objects.filter(cislo_reseni = c).order_by('kod'): |
|
|
|
unode = u.ulohavzoraknode |
|
|
|
pridej_potomka(cnode, unode) |
|
|
|
|
|
|
|
#TODO! |
|
|
|
raise NotYetImplemented("Ještě než se smaže Franken-model, je potřeba spojit stromečky správně!") |
|
|
|
|
|
|
|
class Migration(migrations.Migration): |
|
|
|
|
|
|
|