add extra button admin

This commit is contained in:
pierre geeraert
2026-09-09 20:59:18 +01:00
parent 1012ea31ad
commit b540c7b7e8
3 changed files with 39 additions and 26 deletions
+37 -25
View File
@@ -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]
@button()
def import_namespace(self, request):
# your business logic here
import_namespace()
self.message_user(request, 'Namespaces imported')
+1 -1
View File
@@ -10,4 +10,4 @@ class JobAdmin(ImportExportModelAdmin):
list_display = ('podcast_name','clickable_links','enabled')
def clickable_links(self, obj):
return format_html('<a href="{}">{}</a>', obj.podcast_url,obj.podcast_url)
return format_html('<a href="{}">{}</a>', obj.podcast_url,obj.podcast_url)