diff --git a/seminar/admin.py b/seminar/admin.py index f57dbfbb..38dd0676 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -90,6 +90,9 @@ class Soustredeni_UcastniciInline(admin.TabularInline): fields = ['resitel', 'poznamka', ] extra = 0 + def get_queryset(self, request): + qs = super(Soustredeni_UcastniciInline, self).get_queryset(request) + return qs.select_related('resitel', 'soustredeni') ### Resitel diff --git a/seminar/models.py b/seminar/models.py index 3f5f59fd..9d76092a 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -10,6 +10,8 @@ from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import force_unicode from django.utils.text import slugify from django.core.urlresolvers import reverse +from django.core.cache import cache + from django_countries.fields import CountryField from solo.models import SingletonModel @@ -19,7 +21,6 @@ import reversion from seminar.utils import roman -# TODO společná báze (admin url, url, veřejné, ...) class SeminarModelBase(models.Model): class Meta: @@ -230,6 +231,16 @@ class Rocnik(SeminarModelBase): def verejne_url(self): return reverse('seminar_rocnik', kwargs={'pk': self.id}) + @classmethod + def cached_rocnik(cls, r_id): + name = 'rocnik_%s' % (r_id, ) + c = cache.get(name) + if c is None: + c = cls.objects.get(id=r_id) + cache.set(name, c, 300) + return c + + @reversion.register(ignore_duplicate_revisions=True) @python_2_unicode_compatible @@ -239,7 +250,7 @@ class Cislo(SeminarModelBase): db_table = 'seminar_cisla' verbose_name = u'Číslo' verbose_name_plural = u'Čísla' - ordering = ['rocnik_id', 'cislo'] + ordering = ['rocnik__rocnik', 'cislo'] # Interní ID id = models.AutoField(primary_key = True) @@ -265,9 +276,9 @@ class Cislo(SeminarModelBase): kod.short_description = u'Kód čísla' def __str__(self): - #TODO: DB HOG - #return force_unicode(u'%s' % (self.kod(),)) - return force_unicode(u'%s' % (self.cislo,)) + # Potenciální DB HOG, pokud by se ročník neckešoval + r = Rocnik.cached_rocnik(self.rocnik_id) + return force_unicode(u'%s.%s' % (r.rocnik, self.cislo, )) def verejne(self): return self.verejne_db @@ -416,7 +427,7 @@ class Reseni(SeminarModelBase): def __str__(self): return force_unicode(u"%s: %s (%sb)" % (self.resitel.plne_jmeno(), self.problem.nazev, self.body)) - #TODO: DB HOG + # NOTE: Potenciální DB HOG (bez select_related) # PrilohaReseni method @@ -516,7 +527,7 @@ class Soustredeni_Ucastnici(models.Model): def __str__(self): return force_unicode(u'%s na %s' % (self.resitel, self.soustredeni, )) - #TODO: DB HOG + # NOTE: Poteciální DB HOG bez select_related @python_2_unicode_compatible @@ -539,7 +550,7 @@ class VysledkyBase(SeminarModelBase): def __str__(self): return force_unicode(u"%s: %sb (%s)" % (self.resitel.plne_jmeno(), self.body, str(self.cislo))) - #NOTE: DB HOG (ale nepouzivany) + # NOTE: DB HOG (ale nepouzivany) @python_2_unicode_compatible class VysledkyZaCislo(VysledkyBase): @@ -550,7 +561,7 @@ class VysledkyZaCislo(VysledkyBase): managed = False def __str__(self): - #NOTE: DB HOG (ale nepouzivany) + # NOTE: DB HOG (ale nepouzivany) return force_unicode(u"%s: %sb (za %s)" % (self.resitel.plne_jmeno(), self.body, str(self.cislo))) @@ -565,7 +576,7 @@ class VysledkyKCislu(VysledkyBase): body_celkem = models.IntegerField(u'body celkem do čísla', db_column='body_celkem') def __str__(self): - #NOTE: DB HOG (ale nepouzivany) + # NOTE: DB HOG (ale nepouzivany) return force_unicode(u"%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo)))