Browse Source

models.py: Cislo.cislo -> Cislo.poradi, Problem.nadproblem related_name: nadproblem_%(class)s -> podproblem

export_seznamu_prednasek
Anet 5 years ago
parent
commit
171d1f8f37
  1. 26
      seminar/models.py
  2. 21
      seminar/views.py

26
seminar/models.py

@ -353,7 +353,7 @@ class Rocnik(SeminarModelBase):
def verejna_cisla(self): def verejna_cisla(self):
vc = [c for c in self.cisla.all() if c.verejne()] vc = [c for c in self.cisla.all() if c.verejne()]
vc.sort(key=lambda c: c.cislo) vc.sort(key=lambda c: c.poradi)
return vc return vc
def posledni_verejne_cislo(self): def posledni_verejne_cislo(self):
@ -362,7 +362,7 @@ class Rocnik(SeminarModelBase):
def verejne_vysledkovky_cisla(self): def verejne_vysledkovky_cisla(self):
vc = list(self.cisla.filter(verejna_vysledkovka=True)) vc = list(self.cisla.filter(verejna_vysledkovka=True))
vc.sort(key=lambda c: c.cislo) vc.sort(key=lambda c: c.poradi)
return vc return vc
def posledni_zverejnena_vysledkovka_cislo(self): def posledni_zverejnena_vysledkovka_cislo(self):
@ -387,7 +387,7 @@ class Rocnik(SeminarModelBase):
def cislo_pdf_filename(self, filename): def cislo_pdf_filename(self, filename):
rocnik = str(self.rocnik.rocnik) rocnik = str(self.rocnik.rocnik)
return os.path.join('cislo', 'pdf', rocnik, '{}-{}.pdf'.format(rocnik, self.cislo)) return os.path.join('cislo', 'pdf', rocnik, '{}-{}.pdf'.format(rocnik, self.poradi))
@reversion.register(ignore_duplicates=True) @reversion.register(ignore_duplicates=True)
class Cislo(SeminarModelBase): class Cislo(SeminarModelBase):
@ -396,7 +396,7 @@ class Cislo(SeminarModelBase):
db_table = 'seminar_cisla' db_table = 'seminar_cisla'
verbose_name = 'Číslo' verbose_name = 'Číslo'
verbose_name_plural = 'Čísla' verbose_name_plural = 'Čísla'
ordering = ['-rocnik__rocnik', '-cislo'] ordering = ['-rocnik__rocnik', '-poradi']
# Interní ID # Interní ID
id = models.AutoField(primary_key = True) id = models.AutoField(primary_key = True)
@ -404,7 +404,7 @@ class Cislo(SeminarModelBase):
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='cisla', rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='cisla',
db_index=True,on_delete=models.PROTECT) db_index=True,on_delete=models.PROTECT)
cislo = models.CharField('název čísla', max_length=32, db_index=True, poradi = models.CharField('název čísla', max_length=32, db_index=True,
help_text='Většinou jen "1", vyjímečně "7-8", lexikograficky určuje pořadí v ročníku!') help_text='Většinou jen "1", vyjímečně "7-8", lexikograficky určuje pořadí v ročníku!')
datum_vydani = models.DateField('datum vydání', blank=True, null=True, datum_vydani = models.DateField('datum vydání', blank=True, null=True,
@ -437,20 +437,20 @@ class Cislo(SeminarModelBase):
# CisloNode # CisloNode
def kod(self): def kod(self):
return '%s.%s' % (self.rocnik.rocnik, self.cislo) return '%s.%s' % (self.rocnik.rocnik, self.poradi)
kod.short_description = 'Kód čísla' kod.short_description = 'Kód čísla'
def __str__(self): def __str__(self):
# Potenciální DB HOG, pokud by se ročník necachoval # Potenciální DB HOG, pokud by se ročník necachoval
r = Rocnik.cached_rocnik(self.rocnik_id) r = Rocnik.cached_rocnik(self.rocnik_id)
return '{}.{}'.format(r.rocnik, self.cislo) return '{}.{}'.format(r.rocnik, self.poradi)
def verejne(self): def verejne(self):
return self.verejne_db return self.verejne_db
verejne.boolean = True verejne.boolean = True
def verejne_url(self): def verejne_url(self):
return reverse('seminar_cislo', kwargs={'rocnik': self.rocnik.rocnik, 'cislo': self.cislo}) return reverse('seminar_cislo', kwargs={'rocnik': self.rocnik.rocnik, 'cislo': self.poradi})
def nasledujici(self): def nasledujici(self):
"Vrací None, pokud je toto poslední" "Vrací None, pokud je toto poslední"
@ -607,7 +607,7 @@ class Problem(SeminarModelBase,PolymorphicModel):
# Problém má podproblémy # Problém má podproblémy
nadproblem = models.ForeignKey('self', verbose_name='nadřazený problém', nadproblem = models.ForeignKey('self', verbose_name='nadřazený problém',
related_name='nadproblem_%(class)s', null=True, blank=True, related_name='podproblem', null=True, blank=True,
on_delete=models.SET_NULL) on_delete=models.SET_NULL)
STAV_NAVRH = 'navrh' STAV_NAVRH = 'navrh'
@ -772,7 +772,7 @@ class Uloha(Problem):
def kod_v_rocniku(self): def kod_v_rocniku(self):
if self.stav == 'zadany': if self.stav == 'zadany':
name="{}.u{}".format(self.cislo_zadani.cislo,self.kod) name="{}.u{}".format(self.cislo_zadani.poradi,self.kod)
if self.nadproblem: if self.nadproblem:
return self.nadproblem.kod_v_rocniku()+name return self.nadproblem.kod_v_rocniku()+name
return name return name
@ -1198,7 +1198,7 @@ class CisloNode(TreeNode):
on_delete = models.PROTECT, # Pokud chci mazat číslo, musím si Node pořešit ručně on_delete = models.PROTECT, # Pokud chci mazat číslo, musím si Node pořešit ručně
verbose_name = "číslo") verbose_name = "číslo")
def __str__(self): def __str__(self):
return 'CisloNode: '+str(self.cislo) return 'CisloNode: '+str(self.poradi)
class MezicisloNode(TreeNode): class MezicisloNode(TreeNode):
class Meta: class Meta:
@ -1319,7 +1319,7 @@ class TextNode(TreeNode):
# #
# def __str__(self): # def __str__(self):
# return "%s: %sb (%s)".format(self.resitel.plne_jmeno(), self.body, # return "%s: %sb (%s)".format(self.resitel.plne_jmeno(), self.body,
# str(self.cislo)) # str(self.poradi))
# # NOTE: DB zatez pri vypisu (ale nepouzivany) # # NOTE: DB zatez pri vypisu (ale nepouzivany)
@ -1369,7 +1369,7 @@ class TextNode(TreeNode):
# #
# def __str__(self): # def __str__(self):
# # NOTE: DB HOG (ale nepouzivany) # # NOTE: DB HOG (ale nepouzivany)
# return "%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo)) # return "%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.poradi))
##mozna potreba upravit ##mozna potreba upravit

21
seminar/views.py

@ -280,16 +280,18 @@ def sloupec_s_poradim(vysledky):
return poradi_l return poradi_l
# spočítá součet bodů získaných daným řešitelem za zadaný problém a všechny jeho podproblémy # spočítá součet bodů získaných daným řešitelem za zadaný problém a všechny jeho podproblémy
def __soucet_resitele_problemu(problem, resitel, soucet): def __soucet_resitele_problemu(problem, resitel, cislo, soucet):
# FIXME: správně je nadproblem_(typ problemu), ale to by bylo potřeba nějak # FIXME: správně je nadproblem_(typ problemu), ale to by bylo potřeba nějak
# zjistit, jaký typ nodu to vlastně je a aplikovat to ve volání funkce # zjistit, jaký typ nodu to vlastně je a aplikovat to ve volání funkce
# sečteme body za daný problém přes všechna řešení daného problému # sečteme body za daný problém přes všechna řešení daného problému
# od daného řešitele # od daného řešitele
reseni_resitele = problem.hodnoceni_set.filter(reseni_resitele__contains=resitel) reseni_resitele = problem.hodnoceni_set.filter(reseni_resitele__contains=resitel,
cislo_body=cislo)
for r in reseni_resitele: for r in reseni_resitele:
soucet += r.body soucet += r.body
# a přičteme k tomu hodnocení všech podproblémů
for p in problem.nadproblem_set: for p in problem.nadproblem_set:
# i přes jméno by to měla být množina jeho podproblémů # i přes jméno by to měla být množina jeho podproblémů
soucet += __soucet_resitele_problemu(p, resitel, soucet) soucet += __soucet_resitele_problemu(p, resitel, soucet)
@ -297,7 +299,8 @@ def __soucet_resitele_problemu(problem, resitel, soucet):
# spočítá součet všech bodů ze všech podproblémů daného problému daného řešitele # spočítá součet všech bodů ze všech podproblémů daného problému daného řešitele
def body_resitele_problemu_v_cisle(problem, resitel, cislo): def body_resitele_problemu_v_cisle(problem, resitel, cislo):
return __soucet_resitele_problemu(problem, resitel, 0) # probably FIXED: nezohledňuje číslo, do kterého se body počítají
return __soucet_resitele_problemu(problem, resitel, cislo, 0)
# vrátí list všech problémů s body v daném čísle, které již nemají nadproblém # vrátí list všech problémů s body v daném čísle, které již nemají nadproblém
def hlavni_problemy_cisla(cislo): def hlavni_problemy_cisla(cislo):
@ -337,12 +340,12 @@ def body_resitele_v_cisle(resitel, cislo):
def body_resitele_v_rocniku(resitel, rocnik, do_cisla=None): def body_resitele_v_rocniku(resitel, rocnik, do_cisla=None):
# pokud do_cisla=None, tak do posledního čísla v ročníku # pokud do_cisla=None, tak do posledního čísla v ročníku
# do_cisla je objekt Cislo # do_cisla je objekt Cislo
cisla = rocnik.cisla cisla = rocnik.cisla # funkce vrátí pole objektů Cislo už lexikograficky setřízené, viz models
body = 0 body = 0
for cislo in cisla: for cislo in cisla:
if cislo == do_cisla: break if cislo.poradi == do_cisla.poradi: break
# druhá část zaručuje, že máme výsledky do daného čísla včetně # druhá část zaručuje, že máme výsledky do daného čísla včetně
body = body + body_resitele_v_cisle(resitel, cislo_node.cislo) body = body + body_resitele_v_cisle(resitel, cislo)
return body return body
#def vysledkovka_rocniku(rocnik, jen_verejne=True): #def vysledkovka_rocniku(rocnik, jen_verejne=True):
@ -360,7 +363,7 @@ def body_resitele_v_rocniku(resitel, rocnik, do_cisla=None):
# return None # return None
# #
# #vybere vsechny vysledky z posledniho (verejneho) cisla a setridi sestupne dle bodu # #vybere vsechny vysledky z posledniho (verejneho) cisla a setridi sestupne dle bodu
# vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')) # vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].poradi).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel'))
# #
# class Vysledkovka: # class Vysledkovka:
# def __init__(self): # def __init__(self):
@ -376,7 +379,7 @@ def body_resitele_v_rocniku(resitel, rocnik, do_cisla=None):
# v.poradi = poradi # v.poradi = poradi
# v.resitel.rocnik = v.resitel.rocnik(rocnik) # v.resitel.rocnik = v.resitel.rocnik(rocnik)
# #
# verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__rocnik=rocnik, cislo=cisla_v_rocniku[0].cislo) # verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__rocnik=rocnik, cislo=cisla_v_rocniku[0].poradi)
# if jen_verejne: # if jen_verejne:
# verejne_vysl_odjakziva = verejne_vysl_odjakziva.filter(cislo__verejna_vysledkovka=True) # verejne_vysl_odjakziva = verejne_vysl_odjakziva.filter(cislo__verejna_vysledkovka=True)
# #
@ -958,7 +961,7 @@ def texDownloadView(request, rocnik, cislo):
"body": p.body, "body": p.body,
"zadani": p.text_zadani, "zadani": p.text_zadani,
"reseni": p.text_reseni, "reseni": p.text_reseni,
"cislo_zadani": p.cislo_zadani.cislo, "cislo_zadani": p.cislo_zadani.poradi,
} for p in resene } for p in resene
], ],
} }

Loading…
Cancel
Save