将Django 1.1.1升级到1.3.1,admin.autodiscover()引发了对contenttypes的异常请求

时间:2012-02-22 15:43:43

标签: django exception admin contenttypes

我将1.1.1 Django项目切换到1.3.1。在urls.py中调用admin.autodiscover()后,管理框架中的sites.py会引发异常,说明:

ImproperlyConfigured at /
Put 'django.contrib.contenttypes' in your INSTALLED_APPS setting in order 
to use the admin application

在settings.py中,我有:

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

我检查过的事情:

  1. contenttypes框架确实在我的INSTALLED_APPS设置中。
  2. 我没有在其他地方重复我的INSTALLED_APPS声明
  3. INSTALLED_APPS中的contenttypes条目列在管理员条目之前。
  4. 运行django-admin.py shell并导入“django.contrib.contenttypes”。
  5. 如果我去管理中的违规行(在check_dependencies,第164行中的Django-1.3.1 / django / contrib / admin / sites.py),我看到:

    if not ContentType._meta.installed:
        raise ImproperlyConfigured(...)
    

    如果我注释掉支票,我可以运行我的项目,管理员也可以。我不确定如何在模型类型上设置_meta.installed属性,所以我不知道下一步该做什么。

    我还应该注意,同样的Django 1.3.1安装正在使用类似设置文件的其他项目。

    任何提示或资源都将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

django.contrib.contenttypes包括两个模型,ContentType和ContentTypeManager。我的猜测是,在将dj​​ango.contrib.contenttypes添加到INSTALLED_APPS后,您还没有运行manage.py syncdb

这将使if not ContentType._meta.installed检查变得可理解:ContentType模型尚未在数据库中使用。