I recently came across the issue described in #5903 [1] earlier. There
are two distinct patches that fix the problem, but at different
levels. My inclination is to fix this issue at the model field level
and properly override get_default. My feeling is that allowing Decimal
objects to pass through force_unicode (when strings_only=True) might
cause ill-effects in other parts of Django, but I am not entirely sure
(running the test suite with the fix in force_unicode didn't cause any
failed test, but that doesn't make it right to me :). I don't see much
reason to do so. Perhaps someone can shed some light on this?
[1]: http://code.djangoproject.com/ticket/5903
--
Brian Rosner
http://oebfare.com
Our usage of Decimals has historically been undertested, so the fact
that you get no test failures doesn't necessarily mean that changing
force_unicode won't cause problems :-)
However, in this case, I'm reasonably convinced it is the right thing
to do. The list of 'ignored' types for force_unicode is essentially
the list of data types that we use for native data representations. I
can't think of any reason that Decimals shouldn't be on that list.
If you're looking for a little more background on exactly what
force_unicode "should" do, here's a discussion from way back, when we
expanded the non-string types to include dates, times, etc:
http://groups.google.com/group/django-developers/browse_thread/thread/c74e881a5f0dc8a6
My reading of that (then, as now), is that
force_unicode(strings_only=True) exists to catch string proxy objects,
not non-string objects; adding Decimal to the list of non-string
objects should be fine.
However, before you check anything in, I would suggest making sure
that we have got good test coverage for this change. In particular, I
would check that we have good Decimal tests for the following:
* Populating initial values on forms. One of the few places that
might be relying on get_default() returning a string is in an initial
value for a form
* Serialization, especially of an object with a decimal default value.
Yours,
Russ Magee %-)
Yes, that's the idea. I agree that allowing Decimal objects to
pass-through natively should be fine.
/me makes a note to add that summary to internal documentation in that
future when I have time to write some.
Regards,
Malcolm