Opened 3 years ago

Last modified 2 years ago

#19396 new Cleanup/optimization

Allow customized ModelState classes

Reported by: akaariai Owned by: nobody
Component: Database layer (models, ORM) Version: master
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


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 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 Changed 3 years ago by russellm

  • Triage Stage changed from Unreviewed to Design 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 Changed 3 years ago by apollo13

  • Triage Stage changed from Design decision needed to Accepted

I think it would be great to have.

comment:3 Changed 2 years ago by timo

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