Подкласс AdminTimeWidget
, чтобы включить модифицированный DateTimeShortcuts.js (доберитесь до этого за секунду), затем подкласс AdminSplitDateTime
, чтобы включить ваш подкласс MyAdminTimeWidget
вместо стандартного Django:
from django.contrib.admin.widgets import AdminTimeWidget
from django.conf import settings
class MyAdminTimeWidget(AdminTimeWidget):
class Media:
js = (settings.ADMIN_MEDIA_PREFIX + "js/calendar.js",
settings.MEDIA_URL + "js/admin/DateTimeShortcuts.js")
class MyAdminSplitDateTime(AdminSplitDateTime):
def __init__(self, attrs=None):
widgets = [AdminDateWidget, MyAdminTimeWidget]
forms.MultiWidget.__init__(self, widgets, attrs)
Секретный соус в django/contrib/admin/media/js/admin/DateTimeShortcuts.js
. Это то, что создает список, который вы хотите изменить. Скопируйте этот файл и вставьте его в каталог site_media/js/admin
вашего проекта. Соответствующий код, который необходимо изменить, находится в строках 85-88:
quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + time_format + "'));");
quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,0,0,0,0).strftime('" + time_format + "'));");
quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,6,0,0,0).strftime('" + time_format + "'));");
quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,12,0,0,0).strftime('" + time_format + "'));");
Просто добавьте / удалите / измените этот бит javascript для вашего сердца.
Наконец, прикрепите ваш новый виджет к любым полям DateTime, которые вам нравятся. Лучшим вариантом для этого, вероятно, будет атрибут formfield_overrides
на ModelAdmin
:
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.DateTimeField: {'widget': MyAdminSplitDateTime},
}