From 7c5407939412840c02629557915decb83a63ca48 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 18 Jun 2020 09:34:11 +0000 Subject: [PATCH] =?UTF-8?q?Oprava=20migrace=20pro=20p=C5=99id=C3=A1n=C3=AD?= =?UTF-8?q?=20=C4=8D=C3=ADsla=20ke=20=C4=8Dl=C3=A1nku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/migrations/0084_clanek_cislo.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/seminar/migrations/0084_clanek_cislo.py b/seminar/migrations/0084_clanek_cislo.py index 03a8ff51..5de1fefa 100644 --- a/seminar/migrations/0084_clanek_cislo.py +++ b/seminar/migrations/0084_clanek_cislo.py @@ -5,25 +5,32 @@ import django.db.models.deletion from seminar.treelib import get_parent def najdi_cislo(apps, schema_editor): - # Clanek = apps.get_model('seminar', 'Clanek') Hodnoceni = apps.get_model('seminar', 'Hodnoceni') Reseni = apps.get_model('seminar', 'Reseni') ReseniNode = apps.get_model('seminar', 'ReseniNode') CisloNode = apps.get_model('seminar', 'CisloNode') + ContentType = apps.get_model('contenttypes', 'ContentType') for c in Clanek.objects.all(): 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í!") - r = reseni[0] - aktualniNode = r.reseninode + r = reseni.first() + aktualniNode = r.text_cely # Hlavní ReseniNode pro řešení while aktualniNode is not None: - if isinstance(aktualniNode, CisloNode): - c.cislo = aktualniNode.cislo + #if isinstance(aktualniNode, CisloNode): # Nejde, protože aktualniNode se tváří jako obecný TreeNode... + # 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() break - aktualniNode = get_parent() + aktualniNode = get_parent(aktualniNode) @@ -39,5 +46,5 @@ class Migration(migrations.Migration): 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í'), ), - migrations.RunPython(najdi_cislo), + migrations.RunPython(najdi_cislo, migrations.RunPython.noop), ]