Allow customized ModelState classes
|Reported by:||Anssi Kääriäinen||Owned by:||nobody|
|Component:||Database layer (models, ORM)||Version:||master|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||yes|
By allowing classes to define customized ModelState classes and by introducing some hooks into model saving custom Model subclasses can implement some often requested things:
- Automatic primary key updates
- Save only changed data
- Proper optimistic locking
Two of the above ideas are implemented in the added tests in https://github.com/akaariai/django/compare/akaariai:model_save_refactor...akaariai:model_state_improvements. The patch is based on model_save_refactor from #16649.
The cost of this is a performance penalty of a 3-5% for instantiating single-field models from DB (query_all benchmark of djangobench), less for multi-field models.
I'd like to keep this private API for a while until more is known about what kinds of states are needed.