From b540c7b7e8c8b5db38518ffc089cccf6c3f3cd1c Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Wed, 9 Sep 2026 20:59:18 +0100 Subject: [PATCH] add extra button admin --- django_code/apps/cloudmanager/admin.py | 62 ++++++++++++-------- django_code/apps/podcast_aggregator/admin.py | 2 +- django_code/core/settings.py | 1 + 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/django_code/apps/cloudmanager/admin.py b/django_code/apps/cloudmanager/admin.py index bb6b80e..253caf2 100644 --- a/django_code/apps/cloudmanager/admin.py +++ b/django_code/apps/cloudmanager/admin.py @@ -1,8 +1,10 @@ from django.contrib import admin,messages from django.utils.translation import ngettext from .models import Deployment_Data,Schedule_Day_Data,Schedule_Week_Data,Namespace_Data -from .utils import import_namespace,import_deployment,generate_default_day_schedule,generate_default_week_schedule,Check_server_supposed_XXX +from .utils import import_namespace,import_deployment,generate_default_day_schedule,generate_default_week_schedule,Check_server_supposed_XXX,retrieve_and_apply from apps.kubernetes_connection.utils import scale_up,scale_down +from admin_extra_buttons.api import ExtraButtonsMixin, button + DB = 'cloudmanager_db' @@ -49,21 +51,6 @@ def Check_server_supposed_true(modeladmin, request, queryset): servers_supposed_false = Check_server_supposed_XXX(True) for server in servers_supposed_false: messages.add_message(request, messages.INFO, server) - -@admin.action(description="create default schedule") -def generate_default_day_schedule_admin(modeladmin, request, queryset): - generate_default_day_schedule() - generate_default_week_schedule() - - -@admin.action(description="import namespace") -def import_namespace_admin(modeladmin, request, queryset): - import_namespace() - -@admin.action(description="import deployment") -def import_deployment_admin(modeladmin, request, queryset): - import_deployment() - class ActiveAtHourFilter(admin.SimpleListFilter): @@ -98,27 +85,52 @@ class MultiDBModelAdmin(admin.ModelAdmin): @admin.register(Deployment_Data) -class DeploymentDataAdmin(MultiDBModelAdmin): +class DeploymentDataAdmin(ExtraButtonsMixin, MultiDBModelAdmin): list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas') list_filter = (ActiveAtHourFilter,) - actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy,import_deployment_admin,generate_default_day_schedule_admin] - + actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy] + @button() + def retrieve_and_apply(self, request): + # your business logic here + retrieve_and_apply() + self.message_user(request, 'Operation started') + + @button() + def import_deployment(self, request): + # your business logic here + import_deployment() + self.message_user(request, 'Deployments imported') @admin.register(Schedule_Day_Data) -class ScheduleDayAdmin(MultiDBModelAdmin): +class ScheduleDayAdmin(ExtraButtonsMixin,MultiDBModelAdmin): list_display = ['name_schedule'] + [f'state_at_{h}' for h in range(24)] - actions = [import_deployment_admin,generate_default_day_schedule_admin] + @button() + def generate_default_day_schedule_admin(self, request): + generate_default_day_schedule() + generate_default_week_schedule() + self.message_user(request, 'Created default schedules') @admin.register(Schedule_Week_Data) -class ScheduleWeekAdmin(MultiDBModelAdmin): +class ScheduleWeekAdmin(ExtraButtonsMixin,MultiDBModelAdmin): list_display = ( 'name_schedule', 'state_Monday', 'state_Tuesday', 'state_Wednesday', 'state_Thursday', 'state_Friday', 'state_Saturday', 'state_Sunday', ) - actions = [import_deployment_admin,generate_default_day_schedule_admin] + @button() + def generate_default_day_schedule_admin(self, request): + generate_default_day_schedule() + generate_default_week_schedule() + self.message_user(request, 'Created default schedules') + @admin.register(Namespace_Data) -class NamespaceAdmin(MultiDBModelAdmin): +class NamespaceAdmin(ExtraButtonsMixin, MultiDBModelAdmin): list_display = ('namespace',) - actions = [import_namespace_admin] \ No newline at end of file + + + @button() + def import_namespace(self, request): + # your business logic here + import_namespace() + self.message_user(request, 'Namespaces imported') diff --git a/django_code/apps/podcast_aggregator/admin.py b/django_code/apps/podcast_aggregator/admin.py index ecbf68e..932142f 100644 --- a/django_code/apps/podcast_aggregator/admin.py +++ b/django_code/apps/podcast_aggregator/admin.py @@ -10,4 +10,4 @@ class JobAdmin(ImportExportModelAdmin): list_display = ('podcast_name','clickable_links','enabled') def clickable_links(self, obj): - return format_html('{}', obj.podcast_url,obj.podcast_url) \ No newline at end of file + return format_html('{}', obj.podcast_url,obj.podcast_url) diff --git a/django_code/core/settings.py b/django_code/core/settings.py index c8bfcfd..a31ec4c 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -54,6 +54,7 @@ INSTALLED_APPS = [ 'import_export', 'djangoql', 'django_q', + 'admin_extra_buttons', ] MIDDLEWARE = [