Django South - 从sqlite3中删除表后迁移不重新创建模型

时间:2014-07-10 00:23:02

标签: python django django-models django-south

我是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进行迁移的所有其他问题,特别是关于“似乎没有任何变化”的错误。但是,我无法通过任何解决方案解决我的问题。

我请求帮助:

  • 从头开始再次创建批准模型并成功迁移
  • 或修复现有的审批模式。

感谢。

2 个答案:

答案 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