aircox/aircox/admin/schedule.py
2024-04-28 00:27:26 +02:00

60 lines
1.6 KiB
Python

from django.contrib import admin
from django.forms import ModelForm
from django.utils.translation import gettext_lazy as _
from aircox.models import Schedule
__all__ = ("ScheduleInlineForm", "ScheduleInline", "ScheduleAdmin")
# In order to simplify schedule_post_save algorithm, an existing schedule can't
# update the following fields: "frequency", "date"
class ScheduleInlineForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.initial:
self.fields["date"].disabled = True
self.fields["frequency"].disabled = True
class ScheduleInline(admin.TabularInline):
model = Schedule
form = ScheduleInlineForm
readonly_fields = ("timezone",)
autocomplete_fields = ("initial",)
extra = 1
@admin.register(Schedule)
class ScheduleAdmin(admin.ModelAdmin):
def program_title(self, obj):
return obj.program.title
program_title.short_description = _("Program")
def freq(self, obj):
return obj.get_frequency_display()
freq.short_description = _("Day")
list_filter = ["frequency", "program"]
list_display = [
"program_title",
"freq",
"time",
"timezone",
"duration",
"initial",
]
list_editable = ("time", "duration", "initial")
autocomplete_fields = ("initial",)
search_fields = ("program__title",)
ordering = ("program__title", "initial", "date")
def get_readonly_fields(self, request, obj=None):
if obj:
return ["program", "date", "frequency"]
else:
return []