Django 1.9-操作错误:无此类表格:产品类别艺术家;因为曼尼菲尔德?

Django 1.9-操作错误:无此类表格:产品类别艺术家;因为曼尼菲尔德?,django,django-models,Django,Django Models,我试着用谷歌搜索这个问题,但我看到的答案大多来自Django版本,在Django版本中,迁移需要南方和/或syncdb。相关的证据与症状相符,但与原因不符 我从Django在执行Django admin startproject项目名称和Django admin startapp产品时创建的默认项目/应用程序开始 models.py python manage.py makemigrations产品 输出: Operations to perform: Apply all migrati

我试着用谷歌搜索这个问题,但我看到的答案大多来自Django版本,在Django版本中,迁移需要南方和/或
syncdb
。相关的证据与症状相符,但与原因不符

我从Django在执行
Django admin startproject项目名称和
Django admin startapp产品时创建的默认项目/应用程序开始

models.py
  • python manage.py makemigrations产品
输出:

Operations to perform:
  Apply all migrations: sessions, contenttypes, auth, admin
Running migrations:
  No migrations to apply.
Migrations for 'products':
  0001_initial.py:
    - Create model Artist
    - Create model Category
Operations to perform:
  Apply all migrations: contenttypes, admin, sessions, products, auth
Running migrations:
  No migrations to apply.
  • python manage.py迁移
输出:

Operations to perform:
  Apply all migrations: sessions, contenttypes, auth, admin
Running migrations:
  No migrations to apply.
Migrations for 'products':
  0001_initial.py:
    - Create model Artist
    - Create model Category
Operations to perform:
  Apply all migrations: contenttypes, admin, sessions, products, auth
Running migrations:
  No migrations to apply.
在这一点上,我感到困惑。是否有要应用的迁移,但却没有?尽管如此,我还是坚持下去

  • python manage.py shell
在此shell中,我输入以下命令:

>>> from products.models import *
>>> artist = Artist(name="foo")
>>> artist.save()
>>> categ = Category(name="bar", desc="baz")
>>> categ.save()
>>> categ.artists.add(artist)
在这一点上,我得到了一个巨大的错误回溯。问题似乎是这样的:

django.db.utils.OperationalError: no such table: products_category_artists
如果我尝试使用内置的管理站点,我会看到相同的错误


我的猜测是,问题在于没有实际应用迁移,或者没有创建特定的表,但我不知道如何解决这两个问题。

django生成了一个名为
django_migrations
的表,它跟踪应用了哪些迁移。如果删除迁移,请重新生成迁移,并尝试在不删除表中记录的情况下进行迁移,django会认为它已经应用了迁移。您永远不应该删除迁移,这将导致django感到困惑

如果您正在积极开发并希望跳过整个迁移系统,则可以,但一旦开始使用迁移,就永远不要删除它们。以下是我在开发新项目时使用的方法:

dropdb mydb && createdb mydb && python manage.py migrate --run-syncdb && python manage.py loaddata initial
首先,它删除数据库和所有数据。然后创建一个空的。
--run syncdb
生成架构,而
loaddata
从数据库加载数据


因此,如果您仍在开发中,并且可以删除所有数据并将所关心的内容移动到fixtures文件中,那么您就可以删除所有迁移文件夹,并在每次更改模型时运行上面的命令。

+1'ing并接受,因为您告诉了我需要知道的内容。我确实想使用迁移系统,但我不知道数据库也有迁移信息,所以仅仅删除migrations文件夹是不够的。(对于未来的访问者,我使用
rm db.sqlite3
删除了数据库,然后使用
python manage.py migrate
,现在就可以使用了。)