import datetime import random from odevzdavatko.models import Reseni, Hodnoceni def gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_cisla, resitele): pocet_reseni = rnd.randint(pocet_resitelu//4, pocet_resitelu * 4) # generujeme náhodný počet řešení vzhledem k počtu řešitelů čísla for _ in range(pocet_reseni): #print("Generuji {}-té řešení".format(reseni)) if rnd.randint(1, 10) == 1: # cca desetina řešení od více řešitelů res_vyber = rnd.sample(resitele_cisla, rnd.randint(2, 5)) else: res_vyber = rnd.sample(resitele_cisla, 1) if resitele[0] in res_vyber: # speciální řešitel, který nemá žádné body res_vyber.remove(resitele[0]) # Vytvoření řešení. if uloha.cislo_zadani.zlomovy_deadline_pro_papirove_cislo() is not None: # combine, abychom dostali plný čas a ne jen datum cas_doruceni = uloha.cislo_zadani.deadline_v_cisle.first().deadline - datetime.timedelta(days=random.randint(0, 40)) - datetime.timedelta(minutes=random.randint(0, 60*24)) # astimezone, protože jinak vyhazuje warning o nenastavené TZ res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)[0], cas_doruceni=cas_doruceni.astimezone(datetime.timezone.utc)) else: res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)[0]) # Problém a řešitele přiřadíme později, ManyToManyField # se nedá vyplnit v create(). res.resitele.set(res_vyber) res.save() deadlines = cisla[poradi_cisla -1 ].deadline_v_cisle.all() dline = random.choice(deadlines) # Vytvoření hodnocení. hod = Hodnoceni.objects.create( body=rnd.randint(0, uloha.max_body), deadline_body = dline, reseni=res, problem=uloha ) return