The re-factored code moves the definition of default widgets for each
model field into an update-able dict and uses `if dbfield.__class__ in
self.formfield_overrides` to look up the correct widget for `dbfield`
instead of using `isinstance()`.

The problem arises when using a custom model field that is subclassed
from Django model field, for example a custom DateTimeField which uses
international input formats by default with the idea being the user
can avoid specifying input formats everywhere the DateTimeField is
used (including Django's admin) without needing to customise their
ModelAdmin and ModelForm classes.

I thought that the solution would be to change `if dbfield.__class__
in self.formfield_overrides` to a for loop that checks for a match
with `isinstance()` on each iteration. The problem with this approach
is that some Django model fields already subclass others (e.g.
CharField) and if a user also wants to add their own widget mapping to
their custom field. With `formfield_overrides` being a dict we can't
be sure of the order we'd be looping over it, and the order would be
important (e.g. check for subclassed fields before base/parent
fields).

Another alternative might be that if a user wants to create a custom
model field and have it use an existing widget or their own widget,
they'll need to add to `formfield_overrides` themselves, but I'm not
sure if this would defeat the purpose of not repeating yourself given
the example above.

I haven't created a ticket for this yet, but discovered it while
digging for an explanation of #8898. Does anyone have feedback or
suggestions?

Cheers.
Tai.

http://code.djangoproject.com/ticket/8898


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to