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])