[1.8.x] Refs #24591 -- Optimized cloning of ModelState objects.

Changed ModelState.clone() to create a deepcopy of self.fields.
This commit is contained in:
Marten Kenbeek 2015-04-19 23:40:24 +02:00 committed by Tim Graham
parent 43f800a978
commit 516907540b
2 changed files with 11 additions and 2 deletions

View File

@ -496,7 +496,7 @@ class ModelState(object):
return self.__class__( return self.__class__(
app_label=self.app_label, app_label=self.app_label,
name=self.name, name=self.name,
fields=list(self.construct_fields()), fields=[(name, copy.deepcopy(field)) for name, field in self.fields],
options=dict(self.options), options=dict(self.options),
bases=self.bases, bases=self.bases,
managers=list(self.construct_managers()), managers=list(self.construct_managers()),

View File

@ -4,7 +4,8 @@ Django 1.8.1 release notes
*Under development* *Under development*
Django 1.8.1 fixes several bugs in 1.8. Django 1.8.1 fixes several bugs in 1.8 and includes some optimizations in the
migrations framework.
Bugfixes Bugfixes
======== ========
@ -61,3 +62,11 @@ Bugfixes
* Fixed JavaScript path of ``contrib.admin``s related field widget when using * Fixed JavaScript path of ``contrib.admin``s related field widget when using
alternate static file storages (:ticket:`24655`). alternate static file storages (:ticket:`24655`).
Optimizations
=============
* Changed ``ModelState`` to deepcopy fields instead of deconstructing and
reconstructing (:ticket:`24591`). This speeds up the rendering of model
states and reduces memory usage when running :djadmin:`manage.py migrate
<migrate>`.