我正在使用 django 1.8.2,突然间我不能再使用 migrate 了。

我搜索了很多,发现 this post 建议我应该从 name 表中删除 django_content_type。但该列不在 django_content_type 表中。

这是我的 django_content_type 表:

 id |     app_label     |     model
----+-------------------+----------------
  1 | admin             | logentry
  2 | auth              | permission
  3 | auth              | group
  4 | auth              | user
  5 | contenttypes      | contenttype
  6 | sessions          | session
  7 | centuryPhotograph | temporaryuser
  8 | centuryPhotograph | userinfo
  9 | centuryPhotograph | log
 10 | centuryPhotograph | uploadedimages
(10 rows)

这是完整的错误:
System check identified some issues:

WARNINGS:
centuryPhotograph.Galleries.closed: (1_6.W002) BooleanField does not have a default value.
    HINT: Django 1.6 changed the default value of BooleanField from False to None. See https://docs.djangoproject.com/en/1.6/ref/models/fields/#booleanfield for more information.
centuryPhotograph.Galleries.open_gallery: (1_6.W002) BooleanField does not have a default value.
    HINT: Django 1.6 changed the default value of BooleanField from False to None. See https://docs.djangoproject.com/en/1.6/ref/models/fields/#booleanfield for more information.
Operations to perform:
  Apply all migrations: admin, centuryPhotograph, contenttypes, auth, sessions
Running migrations:
  No migrations to apply.
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 165, in handle
    emit_post_migrate_signal(created_models, self.verbosity, self.interactive, connection.alias)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/sql.py", line 268, in emit_post_migrate_signal
    using=db)
  File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py", line 198, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/management/__init__.py", line 83, in create_permissions
    ctype = ContentType.objects.db_manager(using).get_for_model(klass)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/contenttypes/models.py", line 58, in get_for_model
    " is migrated before trying to migrate apps individually."
RuntimeError: Error creating new content types. Please make sure contenttypes is migrated before trying to migrate apps individually.

这是我的 installed_apps:
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'centuryPhotograph',
)

我删除了所有迁移并尝试迁移,但问题仍然存在。

最佳答案

我在 Django 1.9 上遇到了同样的问题。上面评论中发布的解决方案对我不起作用,所以发布对我有用的方法:

  • 从所有应用程序中删除所有迁移文件夹。
  • 运行 python manage.py migrate
  • 运行 python manage.py makemigrations
  • 运行 python manage.py migrate

  • 这里的关键是在 运行 migrate 之前运行 makemigrations 一次

    这将在 Django 的所有默认模型上为模型运行迁移,例如:contenttypes, admin, sites, auth, sessions 等。

    完成此操作后,您将运行 makemigrations,它会为您的项目自定义模型进行迁移。

    最后,当您再次运行 migrate 时,它​​会迁移您所有的自定义模型,并且不会提示没有在 contenttype 上运行迁移。

    关于Django 1.8.2 : Error creating new content types,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32502921/

    10-12 13:44