0

我走在一条奇怪的路上,但这是环境的结果。我必须通过inspect_db 从现有的postgres DB 生成单个models.py。接下来我修复了一些字段(键有一些问题),并在这个项目中创建了 2 个应用程序。所以现在我有3个models.py(它们是拆分models.py,由inspect_db生成)。managed = True加入。类具有与数据库中相同的链接和数据类型接下来我希望将此模型集成到现有数据库中。我进行了迁移,我进行了迁移,最后数据库只有系统 django 表(auth_、django_migrations 等)。我的类中没有(尽管创建了迁移文件)。所以我尝试删除迁移目录并重复makemigrationsand migrate,但终端抛出了它:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.
(forest-venv) user@user-HP-Z800-Workstation ~/MyProjects/forest-venv/lesoved $ python manage.py runserver 8001
Performing system checks...

如果我再次尝试进行迁移 - 没有更改。我试图在 django_migrations 表中删除有关我的应用程序的信息 - 没有结果。

所以我的问题是: - 是否可以将新模型集成到现有数据库中(如果名称、键和格式都可以)?- 可以通过迁移后保存现有数据库中的数据的方式进行集成吗?- 如何返回进行迁移的可能性?现在不行了。

4

1 回答 1

2

使用现有数据库的技巧是确保从定义明确的状态开始:首先让 Django 进入与数据库完全相同的状态,然后才开始对模型进行更改。所以这些是步骤:

  1. 检查您的数据库是否没有django-migrations表,如果需要,使用 SQL 将其删除。(注意:我假设这个数据库不是由 Django 生成的,而你正在创建一个新的 django 应用程序)
  2. 使用inspectdb. 如果需要,将模型重命名为具有正确的CamelCase。如果您重命名会更改数据库中表或列名称的模型或字段,请确保设置db_tableMeta模型的选项)和db_column(作为字段属性)。
  3. 运行manage.py makemigrations。检查模型的迁移文件,以确保名称与您的数据库匹配。
  4. 对于您自己的应用程序,运行manage.py migrate <app> --fake. 这会将迁移添加到django-migrations数据库中的表中,就像它们运行一样,而不是实际运行它们。
  5. 然后运行manage.py migrate以创建 django 提供的表(auth,contenttypesession...)
  6. 现在你处于可以开始改变事物的状态。如果您更改模型并运行makemigrations它应该为您的更改创建迁移。
于 2019-02-13T15:57:49.243 回答