在新的Django项目中设置South时出错

时间:2013-03-29 21:09:14

标签: django django-south

我正在开发一个新的django项目并关注this tutorial。我正在“使用South for Database Migrations”,尝试运行python manage.py syncdb,我收到以下错误:

(editorial)[hookedonwinter@hookedonwinter editorial (master *)]$ python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line
    utility.execute()
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 272, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 77, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/management/commands/__init__.py", line 13, in <module>
    from south.management.commands.syncdb import Command as SyncCommand
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/management/commands/syncdb.py", line 18, in <module>
    from south import migration
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/migration/__init__.py", line 11, in <module>
    from south.models import MigrationHistory
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/models.py", line 4, in <module>
    class MigrationHistory(models.Model):
  File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/db/models/base.py", line 97, in __new__
    new_class.add_to_class('_meta', Options(meta, **kwargs))
TypeError: Error when calling the metaclass bases
    __init__() keywords must be strings

这是我的settings.py文件:https://gist.github.com/pjhoberman/5273653

还没有应用程序,只是一个空项目。我猜这是我的一个简单的忽视 - 任何想法?


修改

来自评论:

  • 我还没有任何型号。在我完成任何模型工作之前,我正试着从南方开始。

  • 版本:

    • 的Django == 1.5.1
    • 南== 0.7.6
  • 如果我在settings.py中向南注释,我会收到此错误:

    $ python manage.py syncdb

    TypeError: Error when calling the metaclass bases __init__() keywords must be strings


EDIT2

我重新开始使用django 1.4,它的工作原理。

EDIT3

我将python更新为2.7并使用了django 1.5,这一切都运行良好。

6 个答案:

答案 0 :(得分:2)

底部的“TypeError”是解决方案。如果使用低于2.6.5的Python版本,则会从Django 1.5中收到此错误。问题上有Django bug reportSO discussion。可以说错误信息不是直观的。

OP是对的,没有一个答案解决了这个问题。解决方案是:1)将Python升级到2.7,2)将Django降级到1.4。

答案 1 :(得分:1)

我认为问题在于您在数据库设置中使用的“〜”字符。尝试将#coding=utf-8作为设置的第一行或第二行,看看会发生什么。

如果这不能解决您的问题,请在manage.py文件的同一目录中更改数据库文件名,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'databasename.sql',
    }
}

我尝试按照你发布的教程创建一个新环境,我没有问题。但是当我尝试使用你正在尝试的数据库名称(名称中带有“〜”的名称)时,我收到此错误:

(env) user@pc:/path >$  python manage.py syncdb --noinput
Syncing...
OperationalError: unable to open database file

我敢打赌,这个符号是你问题的根源......告诉我们这是否解决了你的问题!

答案 2 :(得分:1)

我将python更新为2.7并使用了django 1.5,这一切都运行良好。

没有一个答案真正解决了这个问题,所以我自己回答,因为现在我无法删除这个问题。

答案 3 :(得分:0)

南方有很好的文件记录,我相信你在完成它之后会很清楚。

这是教程。

http://south.readthedocs.org/en/0.7.6/tutorial/part1.html

仍然让生活变得更简单..

1)向南下载并将其添加到您的apps目录 2)在settings.py中将“south”添加到INSTALLED APPS 3)运行syncdb
4)$ ./manage.py schemamigration appname --initial
5)$ ./manage.py迁移appname

这是一个非常基本的开始所需要的一切。

答案 4 :(得分:0)

这似乎是一个DB配置问题,试试这个。在文件的顶部:

import os

然后:

PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_DIR, 'yourdatabasename.db'),
    }
}

最后一个syncdb应该可以解决问题。您也可以尝试“python manage.py reset south”来修复APP中可能出现的问题。如果这不起作用,我建议你开始一个新问题来丢弃其他错误。

原帖:Django setup with sqlite3?

答案 5 :(得分:0)

你需要Python 2.6.5+才能运行Django 1.5。这就是为什么降级到Django 1.4或升级到Python 2.7的原因解决了你的问题。

https://docs.djangoproject.com/en/dev/releases/1.5/#python-compatibility