# Generated by Django 3.2.15 on 2022-10-01 09:28 from django.db import migrations, models import django.db.models.deletion from logging import getLogger log = getLogger(__name__) def prirad_deadliny(apps, schema_editor): Hodnoceni = apps.get_model('seminar', 'Hodnoceni') Deadline = apps.get_model('seminar', 'Deadline') for h in Hodnoceni.objects.all(): if h.cislo_body is not None and h.cislo_body.rocnik.rocnik < -1: # Deadline připravený v minulé migraci h.deadline_body = h.cislo_body.deadline_v_cisle.get() h.save() continue p = h.problem if p.polymorphic_ctype.model == 'tema': t = p.tema d = Deadline.objects.filter(cislo__rocnik=t.rocnik, deadline__gte=h.reseni.cas_doruceni).first() if d is None: d = Deadline.objects.filter(cislo__rocnik=t.rocnik).last() if d is not None: h.deadline_body = d h.save() continue cislo = None if p.polymorphic_ctype.model == 'uloha': u = p.uloha cislo = u.cislo_zadani if p.polymorphic_ctype.model == 'clanek': c = p.clanek if c.cislo is not None: cislo = c.cislo if cislo is None: cislo = h.cislo_body if cislo is not None: d = Deadline.objects.filter(cislo=cislo, deadline__gte=h.reseni.cas_doruceni).first() if d is None: d = Deadline.objects.filter(cislo=cislo).last() if d is not None: h.deadline_body = d h.save() continue log.warning(f"Deadline hodnocení {h.id} se nepodařil určit exaktnějším způsobem. Zkouším další.") d = Deadline.objects.filter(deadline__gte=h.reseni.cas_doruceni).first() h.deadline_body = d h.save() # Zběžná kontrola. Předpokládá, že M&M má méně než 10 čísel v ročníku # a že první znak pořadí je int určující dané pořadí (schroustání 7-8). if h.cislo_body and ( int(h.deadline_body.cislo.poradi[0]) + 2 < int(h.cislo_body.poradi[0]) or int(h.deadline_body.cislo.poradi[0]) > int(h.cislo_body.poradi[0]) ): log.error(f"Hodnocení {h.id} se špatně změnilo číslo z {h.cislo_body} na {h.deadline_body.cislo}") class Migration(migrations.Migration): dependencies = [ ('seminar', '0103_deadline'), ] operations = [ migrations.AddField( model_name='hodnoceni', name='deadline_body', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='hodnoceni', to='seminar.deadline', verbose_name='deadline pro body'), ), migrations.RunPython(prirad_deadliny, migrations.RunPython.noop), ]