60 lines
1.6 KiB
Python
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 []
|