Oprava migrace pro přidání čísla ke článku
This commit is contained in:
parent
443f05bddc
commit
7c54079394
1 changed files with 15 additions and 8 deletions
|
@ -5,25 +5,32 @@ import django.db.models.deletion
|
||||||
from seminar.treelib import get_parent
|
from seminar.treelib import get_parent
|
||||||
|
|
||||||
def najdi_cislo(apps, schema_editor):
|
def najdi_cislo(apps, schema_editor):
|
||||||
#
|
|
||||||
Clanek = apps.get_model('seminar', 'Clanek')
|
Clanek = apps.get_model('seminar', 'Clanek')
|
||||||
Hodnoceni = apps.get_model('seminar', 'Hodnoceni')
|
Hodnoceni = apps.get_model('seminar', 'Hodnoceni')
|
||||||
Reseni = apps.get_model('seminar', 'Reseni')
|
Reseni = apps.get_model('seminar', 'Reseni')
|
||||||
ReseniNode = apps.get_model('seminar', 'ReseniNode')
|
ReseniNode = apps.get_model('seminar', 'ReseniNode')
|
||||||
CisloNode = apps.get_model('seminar', 'CisloNode')
|
CisloNode = apps.get_model('seminar', 'CisloNode')
|
||||||
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
||||||
|
|
||||||
for c in Clanek.objects.all():
|
for c in Clanek.objects.all():
|
||||||
reseni = c.reseni_set
|
reseni = c.reseni_set
|
||||||
if (len(reseni) != 1):
|
if (reseni.count() != 1): # Pozor, reseni_set je Manager, takže se na něj musí trošku jinak
|
||||||
raise ValueError("Článek k sobě má nejedno řešení!")
|
raise ValueError("Článek k sobě má nejedno řešení!")
|
||||||
r = reseni[0]
|
r = reseni.first()
|
||||||
aktualniNode = r.reseninode
|
aktualniNode = r.text_cely # Hlavní ReseniNode pro řešení
|
||||||
while aktualniNode is not None:
|
while aktualniNode is not None:
|
||||||
if isinstance(aktualniNode, CisloNode):
|
#if isinstance(aktualniNode, CisloNode): # Nejde, protože aktualniNode se tváří jako obecný TreeNode...
|
||||||
c.cislo = aktualniNode.cislo
|
# Ale v dokumentaci k django-polymorphic se píše, že tam jsou nastavené nějaké fieldy na známé hodnoty :-)
|
||||||
|
# https://django-polymorphic.readthedocs.io/en/stable/migrating.html
|
||||||
|
cislonode_ct = ContentType.objects.get_for_model(CisloNode)
|
||||||
|
akt_ct = aktualniNode.polymorphic_ctype
|
||||||
|
if akt_ct == cislonode_ct:
|
||||||
|
# Zneužíváme tu opačnou vazbu k treenode_ptr, protože
|
||||||
|
# aktualniNode je "jen" TreeNode a ne CisloNode
|
||||||
|
c.cislo = aktualniNode.cislonode.cislo
|
||||||
c.save()
|
c.save()
|
||||||
break
|
break
|
||||||
aktualniNode = get_parent()
|
aktualniNode = get_parent(aktualniNode)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,5 +46,5 @@ class Migration(migrations.Migration):
|
||||||
name='cislo',
|
name='cislo',
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vydane_clanky', to='seminar.Cislo', verbose_name='číslo vydání'),
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vydane_clanky', to='seminar.Cislo', verbose_name='číslo vydání'),
|
||||||
),
|
),
|
||||||
migrations.RunPython(najdi_cislo),
|
migrations.RunPython(najdi_cislo, migrations.RunPython.noop),
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue