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