django-command-extensions является django библиотекой, которая дает некоторые дополнительные команды manage.py. Один из них является sqldiff, который должен дать Вам, sql должен был обновить к Вашей новой модели. Это, однако, перечислено как 'очень экспериментальное'.
Клонирование фактически копирует данные объекта в новый объект.
В этом примере данные не клонируются:
Foo p = new Foo();
Foo o = p;
Если Foo
имеет член ] a
и вы меняете pa
, затем oa
также изменяется, потому что оба p
и o
указывают на один и тот же объект.
Однако
Foo p = new Foo();
Foo o = p.Clone();
В этом случае, если вы измените pa
, тогда oa
останется прежним, потому что они фактически указывают на отдельные объекты.
На самом деле есть два разных способа клонирования : мелкий клон или глубокий клон.
Мелкий клон просто создает новый объект и копирует его члены в новый объект. Это означает, что если один из членов на самом деле является указателем на другой объект, то этот объект будет совместно использоваться старым и новым объектами.
Глубокий клон действительно проходит и клонирует всех членов в новый объект. Таким образом, объекты будут полными копиями всех данных.
Вообще говоря, объекты передаются по ссылке. Итак, если вы скажете $ objB = $ objA
, вы не получите новый объект; вы получаете новое имя для того же объекта. Однако, если вы скажете $ objB = clone $ objA
, вы получите копию $ objA
. В первом случае все, что вы делаете с $ objB
, также происходит с $ objA
. Во втором случае $ objB
не зависит.