#18478 closed Cleanup/optimization (fixed)
Field.get_default will stringify everything that isn't a callable
Reported by: | Enrico Zini | Owned by: | nobody |
---|---|---|---|
Component: | Documentation | Version: | 1.4 |
Severity: | Normal | Keywords: | |
Cc: | timograham@… | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
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,
Attachments (1)
Change History (7)
comment:1 by , 12 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
comment:2 by , 12 years ago
comment:3 by , 12 years ago
Component: | Uncategorized → Documentation |
---|---|
Resolution: | duplicate |
Status: | closed → reopened |
Triage Stage: | Unreviewed → Accepted |
Type: | Uncategorized → Cleanup/optimization |
Well, it took me a bit of time to find it, and I wasn't aware of this reason :)
Accepting as a documentation issue.
by , 12 years ago
Attachment: | 18478.diff added |
---|
comment:4 by , 12 years ago
Cc: | added |
---|---|
Has patch: | set |
comment:5 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
Duplicate of #8633, and the reason is explained there.