Opened 11 years ago

Last modified 10 years ago

#19396 new Cleanup/optimization

Allow customized ModelState classes

Reported by: Anssi Kääriäinen Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

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.

Change History (3)

comment:1 by Russell Keith-Magee, 11 years ago

Triage Stage: UnreviewedDesign decision needed

Seems like a reasonable idea on the face of it, but needs some more discussion before we formally accept the idea.

comment:2 by Florian Apolloner, 11 years ago

Triage Stage: Design decision neededAccepted

I think it would be great to have.

comment:3 by Tim Graham, 10 years ago

Patch needs improvement: set
Note: See TracTickets for help on using tickets.
Back to Top