【问题标题】:Django South error with initial migration初始迁移时出现 Django South 错误
【发布时间】:2011-08-06 22:55:06
【问题描述】:

我创建了一个新的 Django 1.3 项目和应用程序。我将南添加到我的settings.py,但尚未运行syncdb。当我按照 South 教程和文档执行以下命令时,收到如下所示的错误。

  • 对导致问题的原因有什么想法吗? 更新:没有正确安装 South(见答案)。
  • South 0.7.3 是否与 Django 1.3 兼容? 更新:是的。

执行的命令和南错误

$ python ./manage.py schemamigration qexpenses --initial
Creating migrations directory at '/Users/matthew/development/quest-projects/qexpense-tracker/quexptrkr/../quexptrkr/qexpenses/migrations'...
Creating __init__.py in '/Users/matthew/development/quest-projects/qexpense-tracker/quexptrkr/../quexptrkr/qexpenses/migrations'...
 + Added model qexpenses.Buyer
 + Added model qexpenses.Vendor
 + Added model qexpenses.Department
 + Added model qexpenses.Project
 + Added model qexpenses.PurchaseType
 + Added model qexpenses.PurchaseOrder
Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate qexpenses
(qexpense-tracker)matthew@Matthew-Rankins-MacBook-Pro:~/development/quest-projects/qexpense-tracker/quexptrkr
$ python ./manage.py migrate
Traceback (most recent call last):
  File "./manage.py", line 14, in <module>
    execute_manager(settings)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/south/management/commands/migrate.py", line 105, in handle
    ignore_ghosts = ignore_ghosts,
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/south/migration/__init__.py", line 171, in migrate_app
    applied = check_migration_histories(applied, delete_ghosts, ignore_ghosts)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/south/migration/__init__.py", line 72, in check_migration_histories
    for h in histories:
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/query.py", line 107, in _result_iter
    self._fill_cache()
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/query.py", line 772, in _fill_cache
    self._result_cache.append(self._iter.next())
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/query.py", line 273, in iterator
    for row in compiler.results_iter():
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
    cursor.execute(sql, params)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/backends/util.py", line 34, in execute
    return self.cursor.execute(sql, params)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 234, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.DatabaseError: no such table: south_migrationhistory
(qexpense-tracker)matthew@Matthew-Rankins-MacBook-Pro:~/development/quest-projects/qexpense-tracker/quexptrkr
$ 

配置

我正在运行 OS X 10.6.7。下面是我的virtualenvpip 1.0requirements.txt 的输出:

$ cat requirements.txt 
Django==1.3
South==0.7.3
distribute==0.6.15
virtualenv==1.6
virtualenvwrapper==2.6.3
wsgiref==0.1.2

【问题讨论】:

    标签: django migration django-south


    【解决方案1】:

    Ken Cochrane's StackOverflow 问题的答案How Come My South Migrations Doesn't Work for Django 掌握了关键。

    对于一个新的 Django 项目和应用程序,我必须执行以下步骤:

    1. settings.py 中将South 添加到INSTALLED_APPS,但不要添加您的应用
    2. 运行syncdbDjangoSouth 表添加到数据库中。 South 修改了syncdb,因此在您的INSTALLED_APPS 中包含South 很重要。
    3. settings.py 中将应用添加到INSTALLED_APPS
    4. 为每个应用运行python manage.py schemamigration app_name --initial
    5. 运行python manage.py migrate app_name

    阅读说明——不,所有说明

    我很高兴开始使用South,以至于我跳过阅读installation documentation。我只是使用pip install south 安装了South,然后将其添加到我的INSTALLED_APPS。那是我的错。

    installation documentationConfiguring Your Django Installation 部分声明:

    添加 South 后,您需要运行 ./manage.py syncdb 来创建 South 迁移跟踪表(South 由于各种原因,它自己的模型不使用迁移)。

    【讨论】:

    • 如果你已经安装了应用程序,你真的应该这样做:south.readthedocs.org/en/latest/…
    • 他们不能写出更好的普通文档来指出问题吗,这对我不起作用...
    猜你喜欢
    • 2011-03-31
    • 2012-08-06
    • 2011-09-28
    • 2017-09-05
    • 2015-03-02
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多