我有一个django应用程序,里面有四个模型.我现在意识到其中一个模型应该在一个单独的应用程序中.我确实为迁移安装了south,但我认为这不是它可以自动处理的.如何将其中一个模型从旧应用迁移到新应用?
另外,请记住,我需要这是一个可重复的过程,这样我才能迁移生产系统等.
我有一个django应用程序,里面有四个模型.我现在意识到其中一个模型应该在一个单独的应用程序中.我确实为迁移安装了south,但我认为这不是它可以自动处理的.如何将其中一个模型从旧应用迁移到新应用?
另外,请记住,我需要这是一个可重复的过程,这样我才能迁移生产系统等.
假设我们有两个应用程序:通用应用程序和特定应用程序:
myproject/
|-- common
| |-- migrations
| | |-- 0001_initial.py
| | `-- 0002_create_cat.py
| `-- models.py
`-- specific
|-- migrations
| |-- 0001_initial.py
| `-- 0002_create_dog.py
`-- models.py
现在,我们想将模型移动到通用模式.模型.cat到特定应用程序(精确到specific.models.cat).
$ python manage.py schemamigration specific create_cat --auto
+ Added model 'specific.cat'
$ python manage.py schemamigration common drop_cat --auto
- Deleted model 'common.cat'
myproject/
|-- common
| |-- migrations
| | |-- 0001_initial.py
| | |-- 0002_create_cat.py
| | `-- 0003_drop_cat.py
| `-- models.py
`-- specific
|-- migrations
| |-- 0001_initial.py
| |-- 0002_create_dog.py
| `-- 0003_create_cat.py
`-- models.py
现在我们需要编辑两个迁移文件:
#0003_create_cat: replace existing forward and backward code
#to use just one sentence:
def forwards(self, orm):
db.rename_table('common_cat', 'specific_cat')
if not db.dry_run:
# For permissions to work properly after migrating
orm['contenttypes.contenttype'].objects.filter(
app_label='common',
model='cat',
).update(app_label='specific')
def backwards(self, orm):
db.rename_table('specific_cat', 'common_cat')
if not db.dry_run:
# For permissions to work properly after migrating
orm['contenttypes.contenttype'].objects.filter(
app_label='specific',
model='cat',
).update(app_label='common')
#0003_drop_cat:replace existing forward and backward code
#to use just one sentence; add dependency:
depends_on = (
('specific', '0003_create_cat'),
)
def forwards(self, orm):
pass
def backwards(self, orm):
pass
现在,这两款应用的迁移都意识到了变化,生活变得更糟了:-)
python manage.py migrate common
> specific: 0003_create_cat
> common: 0003_drop_cat
将完成迁移和
python manage.py migrate specific 0002_create_dog
< common: 0003_drop_cat
< specific: 0003_create_cat
会把东西往下搬.
Notice that for upgrading of schema I used common app and for downgrading, I used specific app. That's because how the dependency here works.个