From a0fb80130ff4f1fdd9e75c89e8b93b49d34ee797 Mon Sep 17 00:00:00 2001 From: Tomas Gavenciak Date: Thu, 21 May 2015 17:44:51 +0200 Subject: [PATCH] Boost admin to the stars!!! --- seminar/admin.py | 135 ++++++++++++++++++++++++++++++----------------- 1 file changed, 86 insertions(+), 49 deletions(-) diff --git a/seminar/admin.py b/seminar/admin.py index 3a0b2e1f..a2a594f7 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -5,25 +5,61 @@ import reversion from solo.admin import SingletonModelAdmin from ckeditor.widgets import CKEditorWidget -from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni +from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici import autocomplete_light -### Nastaveni + + +### Globální nastavení admin.site.register(Nastaveni, SingletonModelAdmin) -### Skola -class SkolaAdmin(reversion.VersionAdmin): - fieldsets = [ - (None, {'fields': ['nazev', 'kratky_nazev', 'je_zs', 'je_ss']}), - (u'Interní ID', {'fields': ['aesop_id', 'izo'], 'classes': ['collapse']}), - (u'Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}), - ] - list_display = ['nazev', 'aesop_id', 'mesto', 'ulice', 'stat', 'je_zs', 'je_ss'] - list_filter = ['stat', 'je_zs', 'je_ss'] - search_fields = ['nazev', 'mesto', 'ulice'] +### INLINES + +class ResitelInline(admin.TabularInline): + model = Resitel + fields = ['jmeno', 'prijmeni', 'skola', 'mesto', 'rok_maturity', ] + readonly_fields = ['jmeno', 'prijmeni', 'skola', 'mesto', 'rok_maturity', ] + extra = 0 + def has_add_permission(self, req): return False + + +class CisloInline(admin.TabularInline): + model = Cislo + fields = ['cislo', 'datum_vydani', 'datum_deadline', 'verejne_db', 'poznamka'] + readonly_fields = ['cislo'] + extra = 0 + def has_add_permission(self, req): return False + + +class PrilohaReseniInline(admin.StackedInline): + model = PrilohaReseni + fields = ['timestamp', 'soubor', 'poznamka'] + readonly_fields = ['timestamp'] + extra = 0 + + +class ReseniKProblemuInline(admin.TabularInline): + form = autocomplete_light.modelform_factory(Reseni, autocomplete_fields=['resitel'], fields=['resitel']) + model = Reseni + fields = ['resitel', 'forma', 'body', 'cislo_body', 'timestamp', 'poznamka'] + readonly_fields = ['timestamp'] + extra = 0 + + +class ReseniKResiteliInline(admin.TabularInline): + model = Reseni + fields = ['problem', 'forma', 'body', 'cislo_body', 'timestamp', 'poznamka'] + readonly_fields = ['timestamp', 'problem'] + extra = 0 + def has_add_permission(self, req): return False -admin.site.register(Skola, SkolaAdmin) + +class Soustredeni_UcastniciInline(admin.TabularInline): + form = autocomplete_light.modelform_factory(Soustredeni_Ucastnici, autocomplete_fields=['resitel'], fields=['resitel']) + model = Soustredeni_Ucastnici + fields = ['resitel', 'poznamka', ] + extra = 0 ### Resitel @@ -40,15 +76,33 @@ class ResitelAdmin(reversion.VersionAdmin): list_display = ['jmeno', 'prijmeni', 'user', 'pohlavi_muz', 'skola', 'rok_maturity'] list_filter = ['pohlavi_muz', 'rok_maturity', 'zasilat'] search_fields = ['jmeno', 'prijmeni', 'ulice', 'user', 'mesto', 'email'] + inlines = [ReseniKResiteliInline] admin.site.register(Resitel, ResitelAdmin) +### Skola + +class SkolaAdmin(reversion.VersionAdmin): + fieldsets = [ + (None, {'fields': ['nazev', 'kratky_nazev', 'je_zs', 'je_ss']}), + (u'Interní ID', {'fields': ['aesop_id', 'izo'], 'classes': ['collapse']}), + (u'Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}), + (None, {'fields': ['poznamka']}), + ] + list_display = ['nazev', 'aesop_id', 'mesto', 'ulice', 'stat', 'je_zs', 'je_ss'] + list_filter = ['stat', 'je_zs', 'je_ss'] + search_fields = ['nazev', 'mesto', 'ulice'] + inlines = [ResitelInline] + +admin.site.register(Skola, SkolaAdmin) + + ### Cislo class CisloAdmin(reversion.VersionAdmin): fieldsets = [ - (None, {'fields': ['cislo', 'rocnik', 'verejne_db']}), + (None, {'fields': ['cislo', 'rocnik', 'verejne_db', 'poznamka']}), (u'Data', {'fields': ['datum_vydani', 'datum_deadline']}), ] list_display = ['kod', 'rocnik', 'cislo', 'datum_vydani', 'datum_deadline', 'verejne'] @@ -57,12 +111,6 @@ class CisloAdmin(reversion.VersionAdmin): admin.site.register(Cislo, CisloAdmin) -class CisloInline(admin.StackedInline): - model = Cislo - fields = ['cislo', 'datum_vydani', 'datum_deadline', 'verejne'] - readonly_fields = ['cislo'] - extra = 0 - ### Rocnik @@ -78,30 +126,24 @@ admin.site.register(Rocnik, RocnikAdmin) ### PrilohaReseni - -class PrilohaReseniAdmin(reversion.VersionAdmin): - readonly_fields = ['timestamp', 'reseni'] - fieldsets = [ - (None, {'fields': ['reseni', 'soubor', 'timestamp']}), - (u'Poznámky', {'fields': ['poznamka']}), - ] - list_display = ['reseni', 'soubor', 'timestamp'] - list_filter = ['reseni', 'timestamp'] - search_fields = [] - -admin.site.register(PrilohaReseni, PrilohaReseniAdmin) - -class PrilohaReseniInline(admin.StackedInline): - model = PrilohaReseni - fields = ['timestamp', 'soubor', 'poznamka'] - readonly_fields = ['timestamp'] - extra = 1 +# NOTE: Nemá pravděpodobně smysl používat +# class PrilohaReseniAdmin(reversion.VersionAdmin): +# readonly_fields = ['timestamp', 'reseni'] +# fieldsets = [ +# (None, {'fields': ['reseni', 'soubor', 'timestamp']}), +# (u'Poznámky', {'fields': ['poznamka']}), +# ] +# list_display = ['reseni', 'soubor', 'timestamp'] +# list_filter = ['reseni', 'timestamp'] +# search_fields = [] +# +# admin.site.register(PrilohaReseni, PrilohaReseniAdmin) ### Reseni class ReseniAdmin(reversion.VersionAdmin): - form = autocomplete_light.modelform_factory(Reseni, autocomplete_fields=['problem'], fields=['problem']) + form = autocomplete_light.modelform_factory(Reseni, autocomplete_fields=['problem', 'resitel'], fields=['problem', 'resitel']) fieldsets = [ (None, {'fields': ['problem', 'resitel', 'forma', 'body', 'cislo_body', 'timestamp']}), (u'Poznámky', {'fields': ['poznamka']}), @@ -114,12 +156,6 @@ class ReseniAdmin(reversion.VersionAdmin): admin.site.register(Reseni, ReseniAdmin) -class ReseniInline(admin.TabularInline): - model = Reseni - fields = ['resitel', 'forma', 'body', 'cislo_body', 'timestamp', 'poznamka'] - readonly_fields = ['poznamka', 'resitel', 'timestamp', 'cislo_body', 'resitel', 'forma'] - extra = 0 - ### Problem @@ -135,15 +171,15 @@ class ProblemAdmin(reversion.VersionAdmin): form = ProblemAdminForm fieldsets = [ (None, {'fields': ['nazev', 'typ', 'stav', 'autor', 'zamereni', 'body', 'timestamp']}), - (u'Vydání', {'fields': ['cislo_zadani', 'kod', 'cislo_reseni', 'opravovatel']}), - (u'Texty', {'fields': ['text_problemu', 'text_problemu_org']}), + (u'Vydání', {'fields': ['cislo_zadani', 'kod', 'cislo_reseni', 'opravovatel', 'text_problemu']}), + (None, {'fields': ['text_problemu_org']}), ] readonly_fields = ['timestamp'] list_display = ['nazev', 'typ', 'kod', 'stav', 'autor', 'opravovatel', 'verejne', 'cislo_zadani'] list_select_related = True list_filter = ['typ', 'stav', 'timestamp'] search_fields = ['nazev', 'kod', 'text_problemu_org', 'text_problemu'] - inlines = [ReseniInline] + inlines = [ReseniKProblemuInline] view_on_site = Problem.verejne_url admin.site.register(Problem, ProblemAdmin) @@ -157,8 +193,9 @@ class SoustredeniAdmin(reversion.VersionAdmin): (u'Data', {'fields': ['datum_zacatku', 'datum_konce']}), ] list_display = ['rocnik', 'misto', 'datum_zacatku', 'verejne'] + inlines = [Soustredeni_UcastniciInline] list_filter = ['rocnik'] view_on_site = Soustredeni.verejne_url - # TODO: UcastNaSoustredeni jako inline admin.site.register(Soustredeni, SoustredeniAdmin) +