Browse Source

Merge branch 'data_migrations' of gimli.ms.mff.cuni.cz:/akce/mam/git/mamweb into data_migrations

export_seznamu_prednasek
Anet 6 years ago
parent
commit
b0e2bb9dfc
  1. BIN
      Schema_new.dia
  2. 156
      seminar/migrations/0050_auto_20190510_2228.py
  3. 47
      seminar/migrations/0056_vrcholy_pro_rocniky_a_cisla.py
  4. 45
      seminar/models.py
  5. 40
      seminar/testutils.py

BIN
Schema_new.dia

Binary file not shown.

156
seminar/migrations/0050_auto_20190510_2228.py

@ -13,81 +13,115 @@ class Migration(migrations.Migration):
]
operations = [
migrations.AlterField(
model_name='konfera',
name='reseni',
field=models.OneToOneField(blank=True, help_text='Účastnický přípěvek o konfeře', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='konfery', to='seminar.Reseni', verbose_name='článek ke konfeře'),
),
migrations.AlterField(
model_name='organizator',
name='osoba',
field=models.OneToOneField(help_text='osobní údaje organizátora', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='org', to='seminar.Osoba', verbose_name='osoba'),
),
migrations.AlterField(
model_name='reseni',
name='text_cely',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reseni_cely_set', to='seminar.Text', verbose_name='Plná verze textu řešení'),
),
migrations.AlterField(
model_name='resitel',
name='osoba',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Osoba', verbose_name='osoba'),
),
migrations.AlterField(
model_name='uloha',
name='vzorak',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='uloha_vzorak_set', to='seminar.Text', verbose_name='vzorové řešení'),
),
migrations.AlterField(
model_name='uloha',
name='zadani',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='uloha_zadani_set', to='seminar.Text', verbose_name='veřejné zadání'),
),
migrations.CreateModel(
name='CisloNode',
name='TreeNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'verbose_name': 'TreeNode',
'verbose_name_plural': 'TreeNody',
'db_table': 'seminar_nodes_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='seminar.TreeNode')),
('cislo', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='seminar.Cislo', verbose_name='číslo')),
],
options={
'verbose_name': 'Číslo (Node)',
'verbose_name_plural': 'Čísla (Node)',
'db_table': 'seminar_nodes_cislo',
},
bases=('seminar.treenode',),
),
migrations.CreateModel(
name='ClanekNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.ClanekNode', verbose_name='první potomek')),
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.ClanekNode', verbose_name='kořen stromu')),
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.ClanekNode', verbose_name='další element na stejné úrovni')),
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
('clanek', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Clanek', verbose_name='článek')),
],
options={
'verbose_name': 'Článek (Node)',
'verbose_name_plural': 'Články (Node)',
'db_table': 'seminar_nodes_clanek',
},
bases=('seminar.treenode',),
),
migrations.CreateModel(
name='KonferaNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.KonferaNode', verbose_name='první potomek')),
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.KonferaNode', verbose_name='kořen stromu')),
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.KonferaNode', verbose_name='další element na stejné úrovni')),
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
('konfera', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Konfera', verbose_name='konfera')),
],
options={
'verbose_name': 'Konfera (Node)',
'verbose_name_plural': 'Konfery (Node)',
'db_table': 'seminar_nodes_konfera',
},
bases=('seminar.treenode',),
),
migrations.CreateModel(
name='MezicisloNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.MezicisloNode', verbose_name='první potomek')),
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.MezicisloNode', verbose_name='kořen stromu')),
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.MezicisloNode', verbose_name='další element na stejné úrovni')),
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
],
options={
'verbose_name': 'Mezičíslo (Node)',
'verbose_name_plural': 'Mezičísla (Node)',
'db_table': 'seminar_nodes_mezicislo',
},
bases=('seminar.treenode',),
),
migrations.CreateModel(
name='RocnikNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.RocnikNode', verbose_name='první potomek')),
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
('rocnik', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='seminar.Rocnik', verbose_name='ročník')),
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.RocnikNode', verbose_name='kořen stromu')),
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.RocnikNode', verbose_name='další element na stejné úrovni')),
],
options={
'verbose_name': 'Ročník (Node)',
'verbose_name_plural': 'Ročníky (Node)',
'db_table': 'seminar_nodes_rocnik',
},
bases=('seminar.treenode',),
),
migrations.CreateModel(
name='TemaVCisleNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.TemaVCisleNode', verbose_name='první potomek')),
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.TemaVCisleNode', verbose_name='kořen stromu')),
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.TemaVCisleNode', verbose_name='další element na stejné úrovni')),
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
('tema', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Tema', verbose_name='téma v čísle')),
],
options={
@ -95,14 +129,12 @@ class Migration(migrations.Migration):
'verbose_name_plural': 'Témata v čísle (Node)',
'db_table': 'seminar_nodes_temavcisle',
},
bases=('seminar.treenode',),
),
migrations.CreateModel(
name='TextNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.TextNode', verbose_name='první potomek')),
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.TextNode', verbose_name='kořen stromu')),
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.TextNode', verbose_name='další element na stejné úrovni')),
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
('text', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Text', verbose_name='text')),
],
options={
@ -110,69 +142,47 @@ class Migration(migrations.Migration):
'verbose_name_plural': 'Text (Node)',
'db_table': 'seminar_nodes_obsah',
},
bases=('seminar.treenode',),
),
migrations.CreateModel(
name='UlohaNode',
name='UlohaVzorakNode',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.UlohaNode', verbose_name='první potomek')),
('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.UlohaNode', verbose_name='kořen stromu')),
('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.UlohaNode', verbose_name='další element na stejné úrovni')),
('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
('uloha', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Uloha', verbose_name='úloha')),
],
options={
'verbose_name': 'Úloha (Node)',
'verbose_name_plural': 'Úlohy (Node)',
'db_table': 'seminar_nodes_uloha',
'verbose_name': 'Vzorák úlohy (Node)',
'verbose_name_plural': 'Vzoráky úloh (Node)',
'db_table': 'seminar_nodes_uloha_vzorak',
},
bases=('seminar.treenode',),
),
migrations.AlterField(
model_name='konfera',
name='reseni',
field=models.OneToOneField(blank=True, help_text='Účastnický přípěvek o konfeře', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='konfery', to='seminar.Reseni', verbose_name='článek ke konfeře'),
),
migrations.AlterField(
model_name='organizator',
name='osoba',
field=models.OneToOneField(help_text='osobní údaje organizátora', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='org', to='seminar.Osoba', verbose_name='osoba'),
),
migrations.AlterField(
model_name='reseni',
name='text_cely',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reseni_cely_set', to='seminar.Text', verbose_name='Plná verze textu řešení'),
),
migrations.AlterField(
model_name='resitel',
name='osoba',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Osoba', verbose_name='osoba'),
),
migrations.AlterField(
model_name='uloha',
name='vzorak',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='uloha_vzorak_set', to='seminar.Text', verbose_name='vzorové řešení'),
),
migrations.AlterField(
model_name='uloha',
name='zadani',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='uloha_zadani_set', to='seminar.Text', verbose_name='veřejné zadání'),
),
migrations.AddField(
model_name='cislonode',
name='cislo',
field=models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='seminar.Cislo', verbose_name='číslo'),
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='seminar.TreeNode')),
('uloha', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Uloha', verbose_name='úloha')),
],
options={
'verbose_name': 'Zadání úlohy (Node)',
'verbose_name_plural': 'Zadání úloh (Node)',
'db_table': 'seminar_nodes_uloha_zadani',
},
bases=('seminar.treenode',),
),
migrations.AddField(
model_name='cislonode',
model_name='treenode',
name='first_child',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.CisloNode', verbose_name='první potomek'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.TreeNode', verbose_name='první potomek'),
),
migrations.AddField(
model_name='cislonode',
model_name='treenode',
name='root',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.CisloNode', verbose_name='kořen stromu'),
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.TreeNode', verbose_name='kořen stromu'),
),
migrations.AddField(
model_name='cislonode',
model_name='treenode',
name='succ',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.CisloNode', verbose_name='další element na stejné úrovni'),
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.TreeNode', verbose_name='další element na stejné úrovni'),
),
]

47
seminar/migrations/0056_vrcholy_pro_rocniky_a_cisla.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-05-23 21:54
from __future__ import unicode_literals
from django.db import migrations
def generuj_RocnikNody_a_CisloNody(apps,schema_editor):
Rocnik = apps.get_model('seminar', 'Rocnik')
RocnikNode = apps.get_model('seminar', 'RocnikNode')
Cislo = apps.get_model('seminar', 'Cislo')
CisloNode = apps.get_model('seminar', 'CisloNode')
last_rn = None # last_* slouží k navázání následníků
for r in Rocnik.objects.all():
rn = RocnikNode.objects.create(rocnik=r)
rn.save()
rn.root = rn
rn.save()
if last_rn:
last_rn.succ = rn
last_rn.save()
last_rn = rn
last_cn = None
for c in Cislo.objects.filter(rocnik=r):
cn = CisloNode.objects.create(cislo=c, root=rn)
cn.save()
if last_cn: # Jsme něčí následník
last_cn.succ = cn
last_cn.save()
else: # Jsme první v řadě, takže se musíme přidat jako first_child RočníkNodu
rn.first_child = cn
rn.save()
last_cn = cn
class Migration(migrations.Migration):
dependencies = [
('seminar', '0055_smazat_nemigrovane_zastarale_veci'),
]
operations = [
migrations.RunPython(generuj_RocnikNody_a_CisloNody),
]

45
seminar/models.py

@ -1093,19 +1093,22 @@ class Obrazek(SeminarModelBase):
class TreeNode(models.Model):
class Meta:
abstract = True
root = models.ForeignKey('self',
db_table = "seminar_nodes_treenode"
verbose_name = "TreeNode"
verbose_name_plural = "TreeNody"
root = models.ForeignKey('TreeNode',
related_name="potomci_set",
null = True,
blank = False,
on_delete = models.SET_NULL, # Vrcholy s null kořenem jsou sirotci bez ročníku
verbose_name="kořen stromu")
first_child = models.ForeignKey('self',
first_child = models.ForeignKey('TreeNode',
null = True,
blank = True,
on_delete=models.SET_NULL,
verbose_name="první potomek")
succ = models.OneToOneField('self',
succ = models.OneToOneField('TreeNode',
related_name="prev",
null = True,
blank = True,
@ -1151,18 +1154,44 @@ class KonferaNode(TreeNode):
db_table = 'seminar_nodes_konfera'
verbose_name = 'Konfera (Node)'
verbose_name_plural = 'Konfery (Node)'
konfera = models.ForeignKey(Konfera,
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně
verbose_name = "konfera",
null=True,
blank=False)
class ClanekNode(TreeNode):
class Meta:
db_table = 'seminar_nodes_clanek'
verbose_name = 'Článek (Node)'
verbose_name_plural = 'Články (Node)'
clanek = models.ForeignKey(Clanek,
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně
verbose_name = "článek",
null=True,
blank=False)
class UlohaNode(TreeNode):
class UlohaZadaniNode(TreeNode):
class Meta:
db_table = 'seminar_nodes_uloha'
verbose_name = 'Úloha (Node)'
verbose_name_plural = 'Úlohy (Node)'
db_table = 'seminar_nodes_uloha_zadani'
verbose_name = 'Zadání úlohy (Node)'
verbose_name_plural = 'Zadání úloh (Node)'
uloha = models.ForeignKey(Uloha,
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně
verbose_name = "úloha",
null=True,
blank=False)
class UlohaVzorakNode(TreeNode):
class Meta:
db_table = 'seminar_nodes_uloha_vzorak'
verbose_name = 'Vzorák úlohy (Node)'
verbose_name_plural = 'Vzoráky úloh (Node)'
uloha = models.ForeignKey(Uloha,
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně
verbose_name = "úloha",
null=True,
blank=False)
class TextNode(TreeNode):
class Meta:

40
seminar/testutils.py

@ -125,6 +125,10 @@ def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
'''
cislo = cislo cisla v rocniku, nikoli objekt Cislo
'''
<<<<<<< HEAD
=======
>>>>>>> 69f9b54e7b5dbb36070d978d29d90987b1c9212b
# ulohy resene v ci
jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá",
"Zákeřná", "Fyzikální"]
@ -160,11 +164,24 @@ def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
cislo_zadani=slovnik_cisel[cislo-2],
cislo_reseni=slovnik_cisel[cislo],
cislo_deadline=slovnik_cisel[cislo],
<<<<<<< HEAD
max_body = rnd.randint(1, 8))
p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),
rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)])
p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)])
p.opravovatele = rnd.sample(organizatori, poc_op)
=======
max_body = rnd.randint(1, 8)
)
p.zadani = " ".join(
[rnd.choice(sloveso),
rnd.choice(koho),
rnd.choice(ceho),
rnd.choice(jmeno),
rnd.choice(kde)]
)
p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)])
>>>>>>> 69f9b54e7b5dbb36070d978d29d90987b1c9212b
p.save()
# reseni ulohy
@ -174,6 +191,7 @@ def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
# (nebo skoro vsechny resitele, pokud jich je mene nez pocet reseni)
res_vyber = rnd.sample(resitele, min(poc_reseni, len(resitele) - 2))
for resitel in res_vyber:
<<<<<<< HEAD
# problem a resitele přiřadíme později, ManyToManyField
# se nedá vyplnit v create()
res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES))
@ -184,15 +202,31 @@ def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
body=rnd.randint(0, p.max_body),
cislo_body=slovnik_cisel[cislo],
reseni=res, problem=p)
=======
res = Reseni.objects.create(
problem = p,
resitele=[resitel],
forma=rnd.choice(Reseni.FORMA_CHOICES)
)
hod = Hodnoceni.objects.create(
body=rnd.randint(0, p.max_body),
cislo_body=slovnik_cisel[cislo],
reseni=res,
problem=p
)
>>>>>>> 69f9b54e7b5dbb36070d978d29d90987b1c9212b
return
def gen_soustredeni():
# TODO: vice soustredeni a k nim nahodne podmnoziny organizatoru a ucastniku
# TODO: pozor, organizatori a ucastnici jsou ManyToManyField, musí se přiřadit
# mimo create() a pak dát save()
sous = Soustredeni.objects.create(rocnik=Rocnik.objects.first(), verejne_db=True,
misto=u'Někde', datum_zacatku=datetime.date(2000, 11, 23),
datum_konce=datetime.date(2000, 11, 27))
sous = Soustredeni.objects.create(rocnik=Rocnik.objects.first(),
verejne_db=True,
misto=u'Někde',
datum_zacatku=datetime.date(2000, 11, 23),
datum_konce=datetime.date(2000, 11, 27)
)
for res in rnd.sample(resitele, 6):
Soustredeni_Ucastnici.objects.create(resitel=res, soustredeni=sous)

Loading…
Cancel
Save