2016-02-16 28 views
1

从现有数据库开始,我想更新它的模式。我改变了我的一个模型,然后运行Django迁移不会更新我的数据库

python manage.py makemigrations myapp 

它创建迁移,正确定义新的表和列。输出示例:

Migrations for 'myapp': 
    0001_initial.py: 
    - Create model Foo 
    - Add field Bar 
    - ... 

然后我申请迁移:

python manage.py migrate --database mydb 

我得到这样的输出:

Operations to perform: 
    Apply all migrations: admin, myapp, contenttypes, sessions, auth 
Running migrations: 
    Rendering model states... DONE 
    Applying admin.0002_logentry_remove_auto_add... OK 
    Applying auth.0007_alter_validators_add_error_messages... OK 

这似乎已经奏效。 Git告诉我,对应于“mydb”的sqlite文件已经改变。然而,它并没有将我的新表和列放在里面,它只是删除了内容,留下的空表与旧的模式一起。

我在做什么错?

+0

尝试:'python manage.py migrate myapp' –

+0

默认情况下,它会尝试应用每种可能的迁移(在我的情况中只有一种)。 – JulienD

回答

2

如果你有没有应用,你应该没有任何变化创造initial migrations迁移旧的数据库:

python manage.py makemigrations myapp 

然后运行“假”迁移

python manage.py migrate --database mydb --fake-initial 

在此之后,你可以使用正常的迁移。

+0

我按照你的建议做了'--fake-initial',并得到了与上面相同的输出。之后,'python manage.py migrate [myapp] --database mydb'告诉我:“没有适用的迁移”。而我的表格在旧模式下是空的。 – JulienD

+0

您是否从'0001_initial.py'中删除了所有'Alter field'和'add field'命令? – ilse2005

+0

不,我应该吗?实际上,使用 - 初始表格不再是空的。我不知道Git检测到了什么变化。 – JulienD