Allow pickling dynamically created Model exception classes (DoesNotExist, MultipleObjectsReturned, RelatedObjectDoesNotExist)
Example:
>>> import django
>>> import pickle
>>> pickle.dumps(django.contrib.auth.models.User.DoesNotExist)
>>> PicklingError: Can't pickle <class 'django.contrib.auth.models.DoesNotExist'>: it's not found as django.contrib.auth.models.DoesNotExist
*Instances* of Model.DoesNotExist
are pickleable as fixed in #17776, however, the class itself is not. This is particularly problematic when using the Django test runner with the --parallel
option enabled when a Model.DoesNotExist
exception is raised. The result of this is the test runner bailing with a pickle.PicklingError
, making it exceptionally difficult to debug the cause of the Model.DoesNotExist
.
Change History
(12)
Type: |
Uncategorized → Bug
|
Description: |
modified (diff)
|
Description: |
modified (diff)
|
Triage Stage: |
Unreviewed → Accepted
|
Patch needs improvement: |
set
|
Has patch: |
unset
|
Patch needs improvement: |
unset
|
Summary: |
Model.DoesNotExist classes are not pickleable → Allow pickling dynamically created Model exception classes (DoesNotExist, MultipleObjectsReturned, RelatedObjectDoesNotExist)
|
Resolution: |
→ fixed
|
Status: |
new → closed
|
I've created a patch for this: https://github.com/django/django/pull/9077