我在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
。 (这恰好是应用尝试访问的第一个表)。
答案 0 :(得分:2)
您可以尝试以下步骤来查看它是否可以解决您的问题:
django_migrations
表中应用迁移的数据库记录。python manage.py makemigrations <appname>
python manage.py migrate <appname>
除上述内容外,您还可以尝试在每个模型类中添加元类设置managed = True
和app_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
标志,它起作用了。