diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 3d88662563..0673e65a45 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -207,6 +207,10 @@ class ModelAdmin(object): if isinstance(db_field, models.ManyToManyField) and db_field.rel.filter_interface: widget = widgets.FilteredSelectMultiple(db_field.verbose_name, db_field.rel.filter_interface-1) return db_field.formfield(widget=widget, **kwargs) + # For DateTimeFields, use a special field and widget. + if isinstance(db_field, models.DateTimeField): + return forms.SplitDateTimeField(required=not db_field.blank, + widget=widgets.AdminSplitDateTime(), label=capfirst(db_field.verbose_name), **kwargs) return db_field.formfield(**kwargs) def has_add_permission(self, request): diff --git a/django/contrib/admin/templates/widget/date_time.html b/django/contrib/admin/templates/widget/date_time.html deleted file mode 100644 index cbd4a2e1c6..0000000000 --- a/django/contrib/admin/templates/widget/date_time.html +++ /dev/null @@ -1,5 +0,0 @@ -{% load i18n %} -

- {% trans "Date:" %} {{ bound_field.form_fields.0 }}
- {% trans "Time:" %} {{ bound_field.form_fields.1 }} -

diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index 96346011ce..15ccaf14a5 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -3,6 +3,7 @@ Form Widget classes specific to the Django admin site. """ from django import newforms as forms +import datetime class FilteredSelectMultiple(forms.SelectMultiple): """ @@ -19,9 +20,24 @@ class FilteredSelectMultiple(forms.SelectMultiple): def render(self, name, value, attrs=None, choices=()): from django.conf import settings output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)] - output.append('\n' % \ + output.append(u'SelectFilter.init("id_%s", "%s", %s, "%s"); });\n' % \ (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.ADMIN_MEDIA_PREFIX)) - return ''.join(output) + return u''.join(output) + +class AdminSplitDateTime(forms.SplitDateTimeWidget): + """ + A SplitDateTime Widget that has some admin-specific styling. + """ + def __init__(self, attrs=None): + widgets = [forms.TextInput(attrs={'class': 'vDateField', 'size': '10'}), + forms.TextInput(attrs={'class': 'vTimeField', 'size': '8'})] + # Note that we're calling MultiWidget, not SplitDateTimeWidget, because + # we want to define widgets. + forms.MultiWidget.__init__(self, widgets, attrs) + + def format_output(self, rendered_widgets): + return u'

%s %s
%s %s

' % \ + (_('Date:'), rendered_widgets[0], _('Time:'), rendered_widgets[1])