The offending line is:
{{{#!python
return lambda: self.default
}}}
This problem only exists in Django version >= 1.11.
The reason for that ''lambda'' is because the code has been refactored so
that all the logic for getting the default value has been moved into the
''_get_default'' method, which allows it to be cached with the
''@cached_property'' decorator. And then the ''get_default'' method
expects the value returned from ''_get_default'' to always be a callable.
That requirement for the value to always be a callable is the reason for
wrapping the value with ''lambda'' in the case where it's not already a
callable.
My proposed solution is to simply move the ''if callable()'' check back
out into the ''get_default'' method. This would mean that we lose a very
minor bit of efficiency because we have to run that one ''if'' statement
each time that ''get_default'' is called, but the rest of the logic would
remain inside the cached ''_get_default'' method.
I have made a commit here which contains my proposed fix and a test to
prevent regression:
https://github.com/adamalton/django/commit/a7c3f672d2ea45df2fdea8cad6ffcfa10172b133
--
Ticket URL: <https://code.djangoproject.com/ticket/28188>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* type: Uncategorized => Bug
* component: Uncategorized => Database layer (models, ORM)
* severity: Normal => Release blocker
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/28188#comment:1>
* owner: nobody => Adam Alton
* status: new => assigned
Old description:
New description:
The offending line is:
{{{#!python
return lambda: self.default
}}}
https://github.com/adamalton/django/commit/ee6aafacfd01f2603943e8c4183805fd4a298355
--
--
Ticket URL: <https://code.djangoproject.com/ticket/28188#comment:2>
* owner: Adam Alton => (none)
* status: assigned => new
* has_patch: 0 => 1
Comment:
[https://github.com/django/django/pull/8481 PR]
I've made the pull request to merge into the ''stable/1.11.x'' branch
(which is what I branched from). I hope that's the right thing to do.
Let me know if it's not.
--
Ticket URL: <https://code.djangoproject.com/ticket/28188#comment:3>
* status: new => closed
* owner: (none) => GitHub <noreply@…>
* resolution: => fixed
Comment:
In [changeset:"a9874d48b1b9d91988b9f299726ec4f559fb2f75" a9874d48]:
{{{
#!CommitTicketReference repository=""
revision="a9874d48b1b9d91988b9f299726ec4f559fb2f75"
Fixed #28188 -- Fixed crash when pickling model fields.
Regression in d2a26c1a90e837777dabdf3d67ceec4d2a70fb86.
Thanks Adam Alton for the report and test, and Adam Johnson for
suggesting the fix.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/28188#comment:4>
Comment (by Tim Graham <timograham@…>):
In [changeset:"74b0837bef6270a78f55878c488561f81a6339f7" 74b0837]:
{{{
#!CommitTicketReference repository=""
revision="74b0837bef6270a78f55878c488561f81a6339f7"
[1.11.x] Fixed #28188 -- Fixed crash when pickling model fields.
Regression in d2a26c1a90e837777dabdf3d67ceec4d2a70fb86.
Thanks Adam Alton for the report and test, and Adam Johnson for
suggesting the fix.
Backport of a9874d48b1b9d91988b9f299726ec4f559fb2f75 from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/28188#comment:5>