Django不在Postgres数据库

时间:2015-11-09 21:01:38

标签: python django database postgresql

我在Django 1.8上有一个带有初始数据夹具的应用程序。当我运行manage.py migrate时,我得到以下输出:

Operations to perform:
  Synchronize unmigrated apps: food, locations, messages, staticfiles, core
  Apply all migrations: auth, sessions, admin, contenttypes
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
/home/myuser/venv/lib/python3.4/site-packages/django/core/management/commands/loaddata.py:229: RemovedInDjango19Warning: initial_data fixtures are deprecated. Use data migrations instead.
  RemovedInDjango19Warning

Installed 87 object(s) from 1 fixture(s)
Running migrations:
  No migrations to apply.

所以看起来安装夹具,但不是真的 - 当我登录我的postgres用户并运行psql\dt时,没有列出任何表格(我确保连接到数据库首先使用\c mydatabase)!尝试在浏览器中查看应用时,我得到:ProgrammingError at / relation "locations_openinghours" does not exist。 (这恰好是应用尝试访问的第一个表)。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下步骤来查看它是否可以解决您的问题:

  1. 删除应用的所有迁移文件,以及django_migrations表中应用迁移的数据库记录。
  2. 运行:python manage.py makemigrations <appname>
  3. 运行:python manage.py migrate <appname>
  4. 除上述内容外,您还可以尝试在每个模型类中添加元类设置managed = Trueapp_label = <name of your app>

    class Food(models.Model): class Meta: app_label = "food" managed = True

    你班上的其他同学。当然,为所有模型添加此Meta。确保app_label小写,就像您在INSTALLED_APPS设置中一样。

答案 1 :(得分:1)

我解决了它,但这是一个愚蠢的问题。首先,当您第一次运行python manage.py makemigrations时,您应该指定要迁移的应用 - 因此我使用了python manage.py makemigrations myapp。其次,我设置项目的方式,manage.py默认使用开发设置,这是写入SQLite数据库。我添加了--settings=core.settings.production标志,它起作用了。