From 0a49ace38cc4be5ed4261beb9ea6cf44ce7a94a9 Mon Sep 17 00:00:00 2001 From: Tomas Gavenciak Date: Thu, 23 Jul 2015 21:32:44 +0200 Subject: [PATCH] Snadne vyrabitko admin akci (viz Soustredeni admin) --- seminar/admin.py | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/seminar/admin.py b/seminar/admin.py index 63c174ac..5db102d7 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- + from django.contrib import admin from django import forms from django.forms import widgets @@ -12,6 +13,23 @@ from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, Prilo import autocomplete_light +def make_set_action(atribut, hodnota, nazev): + u""" + Pomocnik pro rychle vytvareni hromadnych admin akci ktere jen nastavuji + atribut (dany jako string) na danou hodnotu. + nazev je krátký popis akce pro admin rozhraní.""" + def action_f(modeladmin, request, queryset): + for obj in queryset: + assert atribut in obj.__dict__ + obj.__setattr__(atribut, hodnota) + obj.save() + action_f.short_description = nazev + # Trik: je potřeba, aby se funkce různě (ale libovolně) jmenovaly, + # jinak je Django v seznamu akcí splácne do jedné + action_f.__name__ = 'action_f_%d_%d_%d' % (id(atribut), id(hodnota), id(nazev), ) + return action_f + + ### Globální nastavení admin.site.register(Nastaveni, SingletonModelAdmin) @@ -297,18 +315,6 @@ create_modeladmin(ProblemZadanyAdmin, Problem, 'ProblemZadany', verbose_name=u'P ### Soustredeni -def zverejnit_soustredeni(modeladmin, request, queryset): - for soustredeni in queryset: - soustredeni.verejne_db = True - soustredeni.save() -zverejnit_soustredeni.short_description = 'Zveřejnit soustředění' - -def skryt_soustredeni(modeladmin, request, queryset): - for soustredeni in queryset: - soustredeni.verejne_db = False - soustredeni.save() -skryt_soustredeni.short_description = 'Skrýt soustředění (Zneveřjnit)' - class SoustredeniAdminForm(forms.ModelForm): text = forms.CharField(widget=CKEditorWidget(), required=False, **field_labels(Soustredeni, 'text')) class Meta: @@ -325,7 +331,12 @@ class SoustredeniAdmin(reversion.VersionAdmin): inlines = [Soustredeni_UcastniciInline] list_filter = ['typ', 'rocnik'] view_on_site = Soustredeni.verejne_url - actions = [zverejnit_soustredeni, skryt_soustredeni, ] + actions = [ + make_set_action('verejne_db', True, u'Zveřejnit soustředění'), + make_set_action('verejne_db', False, u'Skrýt (zneveřejnit) soustředění'), + make_set_action('exportovat', True, u'Nastavit pro AESOP export'), + make_set_action('exportovat', False, u'Skrýt pro AESOP export'), + ] admin.site.register(Soustredeni, SoustredeniAdmin)