我是Django和South的新手和新用户。我在我的模型包中创建了一个新模型(approval.py)(并将其链接到模型的 init .py),并且能够成功迁移我的应用程序以接受新模型。但是,当我尝试在管理站点上查找该模型时,由于未应用Guardian权限,因此我收到了403禁用错误。 所以我直接从sqlite命令提示符中删除了表,并尝试再次执行以下命令:
$python manage.py syncdb
...
(use ./manage.py migrate to migrate these)
$python manage.py schemamigration myapp --auto
Nothing seems to have changed.
$python manage.py migrate myapp
Running migrations for myapp:
- Nothing to migrate.
- Loading initial data for myapp.
Installed 0 object(s) from 0 fixture(s)
但是,当我检入sqlite命令提示符时,不再创建表。另外,我在admin.sites.url上注册了这个模型,但它不再显示它并给出错误:
DatabaseError at /admin/myapp/approval/
no such table: myapp_approval
Request Method: GET
Request URL: http://localhost/admin/approval/
Django Version: 1.5.1
Exception Type: DatabaseError
Exception Value:
no such table: myapp_approval
Exception Location: /home/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py in execute, line 362
Python Executable: /home/bin/python2.7
Python Version: 2.7.5
Python Path:
['.........']
Server time: Wed, 9 Jul 2014 19:12:00 -0500
我已经检查了StackOverflow上发布的关于使用South进行迁移的所有其他问题,特别是关于“似乎没有任何变化”的错误。但是,我无法通过任何解决方案解决我的问题。
我请求帮助:
感谢。
答案 0 :(得分:1)
经过大量的反复试验后,一些非常简单的事情对我有用。我对南迁没有太多运气。因此,当我从sqlite3手动删除表时,我决定在sqlite3中手动创建表,一切都运行得很好。 我在sqlite3提示符下使用了以下脚本,它解决了我的问题,我能够通过我的管理站点正确访问批准页面并对其执行所有CRUD操作。
CREATE TABLE "myapp_approval" ("id" integer NOT NULL PRIMARY KEY, "desc" varchar(256) NOT NULL);
感谢大家的帮助和支持!
答案 1 :(得分:0)
您已经创建了一个用于创建新表的迁移,并且根据South的历史记录管理,您已经运行了此迁移。 South不知道您的数据库的实际更改。
您需要做的是在创建新表之前恢复迁移。如果您查看应用程序文件夹,您将找到一个migrations
文件夹,其中包含一些迁移文件。如果您在例如迁移0005
,您需要(可选)向后迁移到0005
,然后您需要伪造向后迁移到0004
并再次迁移:
manage.py migrate myapp 0005
manage.py migrate myapp 0004 --fake
manage.py migrate myapp