Opened 8 years ago
Last modified 5 years ago
#27666 closed Cleanup/optimization
Delay rendering of models in migration operations when possible — at Initial Version
Reported by: | Markus Holtermann | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
As it turns out, when we delay the rendering of related models up to the point where it's necessary (just before RunPython, afaict), we can cut down migration time to a quarter and maybe more: https://github.com/MarkusH/django/commit/6b8280e0582d778944585e966404252c4994185e#commitcomment-19719252
PR: https://github.com/django/django/pull/7589
Given that 3rd party migration operations may need to enforce model rendering like we do for RunPython, we probably need to tread this as a backwards incompatible change, I suppose.
def database_forwards(self, app_label, schema_editor, from_state, to_state): if from_state.is_delayed and 'apps' in from_state.__dict__: del from_state.__dict__['apps'] # ...