#18478: Field.get_default will stringify everything that isn't a callable -------------------------------+-------------------- Reporter: enrico | Owner: nobody Type: Uncategorized | Status: new Component: Uncategorized | Version: 1.4 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------+-------------------- I'm using a JSON-encoded field that can take any python data structure as default, this way: {{{ info = fields.ContactInfoField("Contact info", blank=True, default={"a":u"I ♥ Django"}) }}} and found out that I was getting {{{"{'a': u'I \\u2665 Django'}"}}} as a default value in my model objects.
I tracked it down to Field.get_default, which stringifies all non- callables: {{{ def get_default(self): """ Returns the default value for this field. """ if self.has_default(): if callable(self.default): return self.default() return force_unicode(self.default, strings_only=True) if (not self.empty_strings_allowed or (self.null and not connection.features.interprets_empty_strings_as_nulls)): return None return "" }}} Indeed this works as expected: {{{ info = fields.ContactInfoField("Contact info", blank=True, default=lambda:{{"a":u"I ♥ Django"}) }}} I cannot understand the reason for the different treatment of values and callables, and comments don't help. Field documentation does not mention this behaviour either. From what little I can understand, this looks like a bug, -- Ticket URL: <https://code.djangoproject.com/ticket/18478> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.