未找到迁移数据,但Django和South中表未更新

2 投票
1 回答
1091 浏览
提问于 2025-04-17 03:59

我正在更新我的应用程序,想要添加一个管理页面,所以我运行了syncdb命令:

tyre77$ python manage.py syncdb
Syncing...
Creating tables ...
Installing custom SQL ...
Installing indexes ...
No fixtures found.

Synced:
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.sites
 > django.contrib.messages
 > django.contrib.staticfiles
 > south
 > django.contrib.admin

Not synced (use migrations):
 - OmniCloud_App
(use ./manage.py migrate to migrate these)

这没问题!South这个工具已经安装好了,所以我们只需要进行一些迁移操作:

tyre77$ python manage.py migrate
Running migrations for OmniCloud_App:
- Nothing to migrate.
 - Loading initial data for OmniCloud_App.
No fixtures found

等等,什么情况?你刚才让我进行迁移,我照做了,但找不到任何数据文件,所以应用程序还是没有同步好!

1 个回答

2

“没有找到数据文件。”这个问题和South没有关系。South只是尝试在完成数据库结构和数据的迁移后重新加载数据文件。从你的输出信息来看,你的迁移已经是最新的了。

在这种情况下,它正在寻找的数据文件是:initial_data.[xml/yaml/json]。这个数据文件也是在你运行syncdb时会加载的。

举个例子,当我尝试迁移我的应用时:

python manage.py migrate
Running migrations for home:
 - Migrating forwards to 0001_initial.
 > home:0001_initial
 - Loading initial data for home.
No fixtures found.

不过,如果我提供initial_data.json,在完成迁移后,它会加载这个数据文件。

使用South

根据你的问题,听起来你可能还没有为你的django应用生成任何迁移文件。你可以先运行以下命令:

python manage.py schemamigration OmniCloud_App --initial

这个命令会生成一个叫0001_initial.py的文件。当你运行python manage.py migrate时,它会对你的数据库执行这个迁移。

撰写回答