Make Serializers easier to modify.
Use case
Three times now I've had need to modify the ORM serializers for project use. In some cases I've had to replicate large parts (if not most) of django.core.serializers.python
in order to change 1 or 2 lines because certain calls to functions in django.core.serializers.base
from the serializers are hardcoded.
- Changing JSON serialization to output in alphabetical order (so that
dumpdata
doesn't reorder every field each time you run it)
- Changing deserialization to use
_base_manager
instead of _default_manager
(due to extra constraints on a custom manager)
- Implementing fixes for #7202, #7350 before they were merged
Proposal
I propose that instead of calling the following functions directly, the serializer classes are modified to call an instance method of the same name that then calls the existing module-level functions. This would allow the ability to more easily override just one aspect of serializer functionality without having to replicate large swathes of code.
I am not proposing to move these functions into the python serializer class directly because this may break compatibility with existing code that depends on the existing functions.
django.core.serializers.base.build_instance
django.core.serializers.base.deserializer_m2m_values
django.core.serializers.base.deserializer_fk_values
django.core.serializers.python._get_model
(given that this is already an internal function, implementation can be pushed into the class directly)
(It might also be nice if the json
and pyyaml
classes could also have PythonDeserializer
be made a class attribute but that would involve turning the Deserializer
function into a class and is not nearly as much code to override these as the functions above)
If this sounds acceptable, I will submit a patch.
Change History
(26)
Description: |
modified (diff)
|
Description: |
modified (diff)
|
Description: |
modified (diff)
|
Triage Stage: |
Unreviewed → Accepted
|
Summary: |
Serializers are hard to modify → Make Serializers easier to modify
|
Owner: |
changed from nobody to Emad Mokhtar
|
Status: |
new → assigned
|
Needs tests: |
set
|
Patch needs improvement: |
set
|
Summary: |
Make Serializers easier to modify → Make Serializers easier to modify.
|
Owner: |
Emad Mokhtar removed
|
Status: |
assigned → new
|
Cc: |
Ülgen Sarıkavak added
|
Needs tests: |
unset
|
Owner: |
set to Amir Karimi
|
Patch needs improvement: |
unset
|
Status: |
new → assigned
|
Patch needs improvement: |
set
|
Patch needs improvement: |
unset
|
Patch needs improvement: |
set
|
Patch needs improvement: |
unset
|
Patch needs improvement: |
set
|
Patch needs improvement: |
unset
|
Patch needs improvement: |
set
|
Patch needs improvement: |
unset
|
Triage Stage: |
Accepted → Ready for checkin
|
Resolution: |
→ fixed
|
Status: |
assigned → closed
|
This sounds reasonable to me. My main thought would be to make sure the new hooks a properly documented etc. But yes, good idea.