from django.contrib import admin from django import forms from django.utils.functional import cached_property from .models import ScheduledTask from django.templatetags.static import static from scheduler.utils import get_project_functions class CustomAdmin(admin.ModelAdmin): class Media: css = {"all": (static("scheduler/admin.css"),)} js = (static("scheduler/admin.js"),) class ScheduledTaskForm(forms.ModelForm): DAYS_OF_WEEK_CHOICES = [ (0, "Воскресенье"), (1, "Понедельник"), (2, "Вторник"), (3, "Среда"), (4, "Четверг"), (5, "Пятница"), (6, "Суббота"), ] weekdays = forms.MultipleChoiceField( choices=DAYS_OF_WEEK_CHOICES, widget=forms.CheckboxSelectMultiple, label="Дни недели", required=False, # Опционально ) class Meta: model = ScheduledTask fields = [ "task_name", "function_path", "minutes", "hours", "months", "weekdays", # Используем только поле с галочками "active", ] def clean_weekdays(self): """ Преобразуем список выбранных дней в строку для хранения в базе. """ weekdays = self.cleaned_data.get("weekdays", []) return ",".join(map(str, weekdays)) @admin.register(ScheduledTask) class ScheduledTaskAdmin(admin.ModelAdmin): form = ScheduledTaskForm list_display = ("task_name", "function_path", "minutes", "hours", "months", "weekdays", "active", "formatted_last_run") list_filter = ("active",) search_fields = ("task_name", "function_path") def formatted_last_run(self, obj): return obj.last_run.strftime("%Y-%m-%d %H:%M:%S") if obj.last_run else "Никогда" formatted_last_run.short_description = "Последний запуск"