django app不会激活模型

时间:2014-04-22 18:28:13

标签: python django

在我的Django应用程序中无法激活模型。

manage.py validate返回0错误,无论我做什么,即使我故意输入错误的代码。 manage.py syncdb不会同步任何内容。

我该如何解决这个问题?

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'YolaSite.consumer',
    'south',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

这是数据库连接:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'testdb',                      # Or path to database file if using sqlite3.
    'USER': 'postgres',                      # Not used with sqlite3.
    'PASSWORD': 'alexsis',                  # Not used with sqlite3.
    'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.
}

}

3 个答案:

答案 0 :(得分:0)

来自你的评论:

  

我第一次能够激活模型,所以网站的版本(django app)实际上正在运行,但是现在我尝试更改模型似乎没有被识别。

您已成功使用manage.py syncdb创建数据库表,现在您正尝试使用它来同步"同步"变化。但这并不是syncdb的作用。 Django 1.4的文档(找到here)读取:

  

Syncdb不会改变现有表格

     

syncdb仅为尚未安装的模型创建表。它永远不会发出ALTER TABLE语句来匹配安装后对模型类所做的更改。对模型类和数据库模式的更改通常涉及某种形式的歧义,在这些情况下,Django必须猜测要进行的正确更改。存在关键数据在此过程中丢失的风险。

     

如果您对模型进行了更改并希望更改数据库表以匹配,请使用sql命令显示新的SQL结构,并将其与现有的表模式进行比较以计算更改。

这就是为什么您没有收到任何错误。对于数据库迁移,请使用已安装的South。阅读其文档以了解它的用法。

答案 1 :(得分:0)

你可以使用南方, 或者再次删除你的表和syncdb

答案 2 :(得分:0)

Django的syncdb命令仅在第一次创建表时,但不支持模型演变。

但正如我们所看到的,您已经安装了South,这是用于数据库/模式迁移的正确工具。下一步是你需要告诉South哪些模型需要处理。

只要您只有开发环境,我建议您删除自己应用的所有表格,然后按照South tutorial中的说明操作。

简而言之:

首先,告诉South观看特定应用的模型并创建初始迁移:

./manage.py schemamigration your_app_name --initial

其次,将此迁移应用于您的数据库:

./manage.py migrate your_app_name

第三,对模型即将进行的任何更改都需要新的迁移,可以像这样生成:

./manage.py schemamigration your_app_name --auto

每次迁移都必须部署,所以再次:

./manage.py migrate your_app_name

有关更多信息,请阅读South docs。希望这有帮助!