Migrace: Spojení lesů do hlavního stromu
This commit is contained in:
parent
51123d6a12
commit
83014d631e
1 changed files with 59 additions and 8 deletions
|
@ -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):
|
||||
|
||||
|
|
Loading…
Reference in a new issue