﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
9148	Admin enforces default widgets, preventing the use of custom ones	nanaki	nobody	"When you inherit models.DateTimeField (and several other fields) you are unable to change its widget it always uses the default.
The code in django/contrib/admin/options.py (line 68) looks like this:
It forcibly overrides anything you put in widget or form_class.

{{{
        if isinstance(db_field, models.DateTimeField):
            kwargs['form_class'] = forms.SplitDateTimeField
            kwargs['widget'] = widgets.AdminSplitDateTime()
            """"""
            return db_field.formfield(**kwargs)
}}}

I tried changing it to this:
But then all my DateTime fields lost their widgets.

{{{
        if isinstance(db_field, models.DateTimeField):
            defaults = {'form_class': forms.SplitDateTimeField,
                        'widget': widgets.AdminSplitDateTime()}
            defaults.update(kwargs)
            return db_field.formfield(**kwargs)
}}}

This is a simplified example

{{{
from django.db import models
from django.forms import Field,DateTimeField
from django.forms.widgets import Widget

from django.utils.safestring import mark_safe

class ReadonlyWidget(Widget):
    def render(self, name, value, attrs=None):
        return mark_safe(u'<span>%s</span>' % value)

class ReadonlyDateTimeField(DateTimeField):
    def formfield(self, **kwargs):
        defaults = {'form_class': Field, 'widget': ReadonlyWidget}
        defaults.update(kwargs)
        return super(ReadonlyDateTimeField, self).formfield(**defaults)

class Ticket(models.Model):
    date_raised = ReadonlyDateTimeField()
    date_closed = models.DateTimeField()

}}}
"		closed	contrib.admin	1.0		fixed	DateTimeField DateField inheritance inherit widget	gregoire@… flavio.curella@…	Unreviewed	1	0	1	0	0	0
