# 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 < 26 :
# 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 :
log . warning ( f " Číslo hodnocení { h . id } se nepodařilo určit exaktním způsobem. Dané hodnocení házím do jeho cislo_body: { h . cislo_body } . " )
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
d = Deadline . objects . filter ( deadline__gte = h . reseni . cas_doruceni ) . first ( )
h . deadline_body = d
h . save ( )
log . warning ( f " Deadline hodnocení { h . id } se nepodařil určit exaktnějším způsobem. Zkouším další. Přiřazen { h . deadline_body } . Původní cislo_body: { h . cislo_body } . " )
# 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 h . deadline_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 ) ,
]