如何在两个 Django 应用程序之间移动模型(Django 1.7)
所以大约一年前,我开始了一个项目,和所有新开发人员一样,我并没有真正关注结构,但是现在我与 Django 一起走得更远,它开始出现我的项目布局主要是我的模型结构可怕.
So about a year ago I started a project and like all new developers I didn't really focus too much on the structure, however now I am further along with Django it has started to appear that my project layout mainly my models are horrible in structure.
我的模型主要保存在一个应用程序中,实际上这些模型中的大多数应该在它们自己的单独应用程序中,我确实尝试解决了这个问题并将它们向南移动,但是由于外键等,我发现这很棘手而且非常困难.
I have models mainly held in a single app and really most of these models should be in their own individual apps, I did try and resolve this and move them with south however I found it tricky and really difficult due to foreign keys ect.
然而,由于 Django 1.7 和对迁移的内置支持,现在有更好的方法来做到这一点吗?
However due to Django 1.7 and built in support for migrations is there a better way to do this now?
推荐答案
我正在删除旧答案,因为可能会导致数据丢失.正如 ozan 提到的,我们可以在每个应用程序中创建 2 个迁移.这篇文章下面的评论是指我的旧答案.
I am removing the old answer as may result in data loss. As ozan mentioned, we can create 2 migrations one in each app. The comments below this post refer to my old answer.
第一次迁移以从第一个应用程序中删除模型.
First migration to remove model from 1st app.
$ python manage.py makemigrations old_app --empty
编辑迁移文件以包含这些操作.
Edit migration file to include these operations.
class Migration(migrations.Migration):
database_operations = [migrations.AlterModelTable('TheModel', 'newapp_themodel')]
state_operations = [migrations.DeleteModel('TheModel')]
operations = [
migrations.SeparateDatabaseAndState(
database_operations=database_operations,
state_operations=state_operations)
]
第二次迁移取决于第一次迁移并在第二个应用程序中创建新表.将模型代码移至第二个应用程序后
Second migration which depends on first migration and create the new table in 2nd app. After moving model code to 2nd app
$ python manage.py makemigrations new_app
并将迁移文件编辑为这样的内容.
and edit migration file to something like this.
class Migration(migrations.Migration):
dependencies = [
('old_app', 'above_migration')
]
state_operations = [
migrations.CreateModel(
name='TheModel',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
],
options={
'db_table': 'newapp_themodel',
},
bases=(models.Model,),
)
]
operations = [
migrations.SeparateDatabaseAndState(state_operations=state_operations)
]
相关文章