Přesun adminu tvorby ze semináře
This commit is contained in:
parent
9412a52567
commit
a346c4d49a
2 changed files with 156 additions and 147 deletions
152
seminar/admin.py
152
seminar/admin.py
|
@ -1,157 +1,15 @@
|
|||
from django.contrib import admin
|
||||
from django.db import models
|
||||
from django.forms import widgets, ModelForm
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter
|
||||
from solo.admin import SingletonModelAdmin
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
# Todo: reversion
|
||||
|
||||
from tvorba.models import Rocnik, Cislo, Deadline, ZmrazenaVysledkovka, Problem, Uloha, Tema, Clanek
|
||||
from django.contrib import admin
|
||||
from django.db import models
|
||||
from django.forms import widgets
|
||||
from solo.admin import SingletonModelAdmin
|
||||
|
||||
from seminar.models.nastaveni import Nastaveni
|
||||
from personalni.models import Resitel
|
||||
from soustredeni.models import Konfera
|
||||
from seminar.models.novinky import Novinky
|
||||
from seminar.models.pomocne import Text, Obrazek
|
||||
|
||||
admin.site.register(Rocnik)
|
||||
|
||||
admin.site.register(Deadline)
|
||||
admin.site.register(ZmrazenaVysledkovka)
|
||||
|
||||
|
||||
class DeadlineAdminInline(admin.TabularInline):
|
||||
model = Deadline
|
||||
extra = 0
|
||||
|
||||
|
||||
class CisloForm(ModelForm):
|
||||
class Meta:
|
||||
model = Cislo
|
||||
fields = '__all__'
|
||||
|
||||
def clean(self):
|
||||
if self.cleaned_data.get('verejne_db') == False:
|
||||
return self.cleaned_data
|
||||
# cn = CisloNode.objects.get(cislo=self.instance)
|
||||
# errors = []
|
||||
# for ch in tl.all_children(cn):
|
||||
# if isinstance(ch, TemaVCisleNode):
|
||||
# if ch.tema.stav not in \
|
||||
# (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# errors.append(ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema}))
|
||||
#
|
||||
# if isinstance(ch, UlohaZadaniNode) or isinstance(ch, UlohaVzorakNode):
|
||||
# if ch.uloha.stav not in \
|
||||
# (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# errors.append(ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha}))
|
||||
# if isinstance(ch, ReseniNode):
|
||||
# for problem in ch.reseni.problem_set:
|
||||
# if problem not in \
|
||||
# (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# errors.append(ValidationError('Problém %s není zadaný ani vyřešený', code=problem))
|
||||
# if errors:
|
||||
# errors.append(ValidationError(mark_safe('<b>Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v <a href="/admin/seminar/cislo">seznamu čísel</a></b>')))
|
||||
# raise ValidationError(errors)
|
||||
|
||||
errors = []
|
||||
for ch in Uloha.objects.filter(cislo_zadani=self.instance):
|
||||
if ch.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
errors.append(
|
||||
ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha': ch}))
|
||||
if errors:
|
||||
errors.append(ValidationError(mark_safe(
|
||||
'<b>Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v <a href="/admin/seminar/cislo">seznamu čísel</a></b>')))
|
||||
if self.cleaned_data.get('datum_vydani') == None:
|
||||
self.add_error('datum_vydani','Číslo určené ke zveřejnění nemá nastavené datum vydání')
|
||||
|
||||
if errors:
|
||||
raise ValidationError(errors)
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
|
||||
@admin.register(Cislo)
|
||||
class CisloAdmin(admin.ModelAdmin):
|
||||
form = CisloForm
|
||||
actions = ['force_publish']
|
||||
inlines = (DeadlineAdminInline,)
|
||||
|
||||
def force_publish(self,request,queryset):
|
||||
for cislo in queryset:
|
||||
# cn = CisloNode.objects.get(cislo=cislo)
|
||||
# for ch in tl.all_children(cn):
|
||||
# if isinstance(ch, TemaVCisleNode):
|
||||
# if ch.tema.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# ch.tema.stav = Problem.STAV_ZADANY
|
||||
# ch.tema.save()
|
||||
#
|
||||
# if isinstance(ch, UlohaZadaniNode) or isinstance(ch, UlohaVzorakNode):
|
||||
# if ch.uloha.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# ch.uloha.stav = Problem.STAV_ZADANY
|
||||
# ch.uloha.save()
|
||||
# if isinstance(ch, ReseniNode):
|
||||
# for problem in ch.reseni.problem_set:
|
||||
# if problem not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# problem.stav = Problem.STAV_ZADANY
|
||||
# problem.save()
|
||||
|
||||
for ch in Uloha.objects.filter(cislo_zadani=cislo):
|
||||
if ch.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
ch.stav = Problem.STAV_ZADANY
|
||||
ch.save()
|
||||
|
||||
hp = ch.hlavni_problem
|
||||
if hp.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
hp.stav = Problem.STAV_ZADANY
|
||||
hp.save()
|
||||
|
||||
# TODO Řešení, vzoráky?
|
||||
# TODO Konfera/Článek?
|
||||
|
||||
cislo.verejne_db = True
|
||||
cislo.save()
|
||||
|
||||
force_publish.short_description = 'Zveřejnit vybraná čísla a všechny návrhy úloh v nich učinit zadanými'
|
||||
|
||||
|
||||
@admin.register(Problem)
|
||||
class ProblemAdmin(PolymorphicParentModelAdmin):
|
||||
base_model = Problem
|
||||
child_models = [
|
||||
Tema,
|
||||
Clanek,
|
||||
Uloha,
|
||||
Konfera,
|
||||
]
|
||||
# Pokud chceme orezavat na aktualni rocnik, musime do modelu pridat odkaz na rocnik. Zatim bere vse.
|
||||
search_fields = ['nazev']
|
||||
|
||||
# V ProblemAdmin to nejde, protoze se to nepropise do deti
|
||||
class ProblemAdminMixin(object):
|
||||
show_in_index = True
|
||||
autocomplete_fields = ['nadproblem','autor','garant']
|
||||
filter_horizontal = ['opravovatele']
|
||||
|
||||
|
||||
@admin.register(Tema)
|
||||
class TemaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin):
|
||||
base_model = Tema
|
||||
|
||||
@admin.register(Clanek)
|
||||
class ClanekAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin):
|
||||
base_model = Clanek
|
||||
|
||||
@admin.register(Uloha)
|
||||
class UlohaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin):
|
||||
base_model = Uloha
|
||||
|
||||
@admin.register(Konfera)
|
||||
class KonferaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin):
|
||||
base_model = Konfera
|
||||
|
||||
|
||||
class TextAdminInline(admin.TabularInline):
|
||||
model = Text
|
||||
|
|
151
tvorba/admin.py
Normal file
151
tvorba/admin.py
Normal file
|
@ -0,0 +1,151 @@
|
|||
# Todo: reversion
|
||||
|
||||
from django.contrib import admin
|
||||
from django.forms import ModelForm
|
||||
from django.utils.safestring import mark_safe
|
||||
from polymorphic.admin import \
|
||||
PolymorphicParentModelAdmin, PolymorphicChildModelAdmin
|
||||
|
||||
from soustredeni.models import Konfera
|
||||
from .models import *
|
||||
|
||||
|
||||
admin.site.register(Rocnik)
|
||||
|
||||
admin.site.register(Deadline)
|
||||
admin.site.register(ZmrazenaVysledkovka)
|
||||
|
||||
|
||||
class DeadlineAdminInline(admin.TabularInline):
|
||||
model = Deadline
|
||||
extra = 0
|
||||
|
||||
|
||||
class CisloForm(ModelForm):
|
||||
class Meta:
|
||||
model = Cislo
|
||||
fields = '__all__'
|
||||
|
||||
def clean(self):
|
||||
if self.cleaned_data.get('verejne_db') == False:
|
||||
return self.cleaned_data
|
||||
# cn = CisloNode.objects.get(cislo=self.instance)
|
||||
# errors = []
|
||||
# for ch in tl.all_children(cn):
|
||||
# if isinstance(ch, TemaVCisleNode):
|
||||
# if ch.tema.stav not in \
|
||||
# (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# errors.append(ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema}))
|
||||
#
|
||||
# if isinstance(ch, UlohaZadaniNode) or isinstance(ch, UlohaVzorakNode):
|
||||
# if ch.uloha.stav not in \
|
||||
# (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# errors.append(ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha}))
|
||||
# if isinstance(ch, ReseniNode):
|
||||
# for problem in ch.reseni.problem_set:
|
||||
# if problem not in \
|
||||
# (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# errors.append(ValidationError('Problém %s není zadaný ani vyřešený', code=problem))
|
||||
# if errors:
|
||||
# errors.append(ValidationError(mark_safe('<b>Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v <a href="/admin/seminar/cislo">seznamu čísel</a></b>')))
|
||||
# raise ValidationError(errors)
|
||||
|
||||
errors = []
|
||||
for ch in Uloha.objects.filter(cislo_zadani=self.instance):
|
||||
if ch.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
errors.append(
|
||||
ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha': ch}))
|
||||
if errors:
|
||||
errors.append(ValidationError(mark_safe(
|
||||
'<b>Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v <a href="/admin/seminar/cislo">seznamu čísel</a></b>')))
|
||||
if self.cleaned_data.get('datum_vydani') is None:
|
||||
self.add_error('datum_vydani', 'Číslo určené ke zveřejnění nemá nastavené datum vydání')
|
||||
|
||||
if errors:
|
||||
raise ValidationError(errors)
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
|
||||
@admin.register(Cislo)
|
||||
class CisloAdmin(admin.ModelAdmin):
|
||||
form = CisloForm
|
||||
actions = ['force_publish']
|
||||
inlines = (DeadlineAdminInline,)
|
||||
|
||||
def force_publish(self, request, queryset):
|
||||
for cislo in queryset:
|
||||
# cn = CisloNode.objects.get(cislo=cislo)
|
||||
# for ch in tl.all_children(cn):
|
||||
# if isinstance(ch, TemaVCisleNode):
|
||||
# if ch.tema.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# ch.tema.stav = Problem.STAV_ZADANY
|
||||
# ch.tema.save()
|
||||
#
|
||||
# if isinstance(ch, UlohaZadaniNode) or isinstance(ch, UlohaVzorakNode):
|
||||
# if ch.uloha.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# ch.uloha.stav = Problem.STAV_ZADANY
|
||||
# ch.uloha.save()
|
||||
# if isinstance(ch, ReseniNode):
|
||||
# for problem in ch.reseni.problem_set:
|
||||
# if problem not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
# problem.stav = Problem.STAV_ZADANY
|
||||
# problem.save()
|
||||
|
||||
for ch in Uloha.objects.filter(cislo_zadani=cislo):
|
||||
if ch.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
ch.stav = Problem.STAV_ZADANY
|
||||
ch.save()
|
||||
|
||||
hp = ch.hlavni_problem
|
||||
if hp.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY):
|
||||
hp.stav = Problem.STAV_ZADANY
|
||||
hp.save()
|
||||
|
||||
# TODO Řešení, vzoráky?
|
||||
# TODO Konfera/Článek?
|
||||
|
||||
cislo.verejne_db = True
|
||||
cislo.save()
|
||||
|
||||
force_publish.short_description = 'Zveřejnit vybraná čísla a všechny návrhy úloh v nich učinit zadanými'
|
||||
|
||||
|
||||
@admin.register(Problem)
|
||||
class ProblemAdmin(PolymorphicParentModelAdmin):
|
||||
base_model = Problem
|
||||
child_models = [
|
||||
Tema,
|
||||
Clanek,
|
||||
Uloha,
|
||||
Konfera,
|
||||
]
|
||||
# Pokud chceme orezavat na aktualni rocnik, musime do modelu pridat odkaz na rocnik. Zatim bere vse.
|
||||
search_fields = ['nazev']
|
||||
|
||||
|
||||
# V ProblemAdmin to nejde, protoze se to nepropise do deti
|
||||
class ProblemAdminMixin(object):
|
||||
show_in_index = True
|
||||
autocomplete_fields = ['nadproblem', 'autor', 'garant']
|
||||
filter_horizontal = ['opravovatele']
|
||||
|
||||
|
||||
@admin.register(Tema)
|
||||
class TemaAdmin(ProblemAdminMixin, PolymorphicChildModelAdmin):
|
||||
base_model = Tema
|
||||
|
||||
|
||||
@admin.register(Clanek)
|
||||
class ClanekAdmin(ProblemAdminMixin, PolymorphicChildModelAdmin):
|
||||
base_model = Clanek
|
||||
|
||||
|
||||
@admin.register(Uloha)
|
||||
class UlohaAdmin(ProblemAdminMixin, PolymorphicChildModelAdmin):
|
||||
base_model = Uloha
|
||||
|
||||
|
||||
@admin.register(Konfera)
|
||||
class KonferaAdmin(ProblemAdminMixin, PolymorphicChildModelAdmin):
|
||||
base_model = Konfera
|
Loading…
Reference in a new issue