Django migrate 不会更新我的数据库

Jul*_*enD 2 django django-migrations

从现有数据库开始,我想更新它的架构。我改变了我的一个模型,然后运行

python manage.py makemigrations myapp
Run Code Online (Sandbox Code Playgroud)

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

Migrations for 'myapp':
  0001_initial.py:
    - Create model Foo
    - Add field Bar
    - ...
Run Code Online (Sandbox Code Playgroud)

然后我应用迁移:

python manage.py migrate --database mydb
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

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
Run Code Online (Sandbox Code Playgroud)

它似乎奏效了。Git告诉我“mydb”对应的sqlite文件已经改变了。但是,它没有将我的新表和列放在里面,而是删除了内容,留下了带有旧架构的空表。

我究竟做错了什么 ?

ils*_*005 5

如果您有一个没有应用迁移的旧数据库,您应该在initial migrations没有任何更改的情况下创建。这意味着如果您更改了“models.py”,则将其恢复为原始状态,然后运行:

python manage.py makemigrations myapp
Run Code Online (Sandbox Code Playgroud)

然后运行“假”迁移

python manage.py migrate --database mydb --fake-initial
Run Code Online (Sandbox Code Playgroud)

之后,您可以修改“models.py”并使用正常迁移。

  • 所以我必须恢复我的 models.py,然后伪造它,然后更改模型,然后迁移,对吗? (2认同)