没有这样的列:django_content_type.name

8
我曾经在我的网站 example.com 上部署了 django-oscar 的样例应用程序沙箱。我想把它移动到 example.com:8000 并在 example.com url 上运行另一个项目。我成功地完成了第二个部分,当您输入 example.com 时,您可以看到更新的 django 项目正在运行,但是问题是,原先的 django 项目(django-oscar 的沙箱)无法正常响应。
当您输入 example.com:8000 时,您会看到当前的调试日志:
no such column: django_content_type.name
Request Method: GET
Request URL:    http://example.com:8000/fa/
Django Version: 1.7.8
Exception Type: OperationalError
Exception Value:    
no such column: django_content_type.name
Exception Location: /usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py in execute, line 485
Python Executable:  /usr/bin/python
Python Version: 2.7.3
Python Path:    
['/var/www/setak/setakenv/setakmain/django-oscar/sites/sandbox',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/python2.7/dist-packages/gst-0.10',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
 '/usr/lib/python2.7/dist-packages/ubuntuone-client',
 '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',
 '/usr/lib/python2.7/dist-packages/ubuntuone-couch',
 '/usr/lib/python2.7/dist-packages/ubuntuone-installer',
 '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

现在我谷歌了这个错误,但是没有得到有价值的结果。

另外,当我运行时

sudo python manage.py migrate

以下情况发生了,我也没有找到任何正确的解决方法来修复:
Operations to perform:
  Synchronize unmigrated apps: reports_dashboard, treebeard, oscar, communications_dashboard, reviews_dashboard, debug_toolbar, widget_tweaks, offers_dashboard, catalogue_dashboard, sitemaps, compressor, django_extensions, dashboard, thumbnail, haystack, ranges_dashboard, checkout, gateway, django_tables2
  Apply all migrations: customer, promotions, shipping, wishlists, offer, admin, sessions, contenttypes, auth, payment, reviews, analytics, catalogue, flatpages, sites, address, basket, partner, order, voucher
Synchronizing apps without migrations:
  Creating tables...
  Installing custom SQL...
  Installing indexes...
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.

更新1:我也在使用Django 1.7.8。

更新2:我将Django版本更改为1.8.1,makemigrations和migrate命令都可以正常工作。然后我再次启动服务器,但是现在我的日志中出现了以下错误:(我还删除了Apache设置,因为它们与问题无关!)

Traceback (most recent call last):
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 170, in __call__
    self.load_middleware()
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 50, in load_middleware
    mw_class = import_string(middleware_path)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/module_loading.py", line 26, in import_string
    module = import_module(module_path)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named transaction

你尝试过Django建议的先迁移contenttypes吗? - ger.s.brett
@ger.s.brett 是的,我做了。仍然出现相同的错误! - Ashkan Kazemi
你是从Django 1.8开始的,然后降级到Django 1.7.8吗? - karthikr
@karthikr,那不是一个选项,但还是谢谢! - Ashkan Kazemi
数据库实际上是SQLite,我猜的,但当我运行此命令时,日志中写入以下内容: 目标特定迁移:0001_initial,来自contenttypes 然后再次发生相同的错误。 - Ashkan Kazemi
显示剩余4条评论
2个回答

17

我终于解决了我的问题。问题在于我使用django 1.8来运行manage.py migrate,但项目是在django 1.7.1下开发的,因此迁移出现了问题。

所以我的做法是重新安装django 1.8.1,运行manage.py migrate contenttypes 0001,然后卸载django 1.8.1,安装django 1.7.8并运行manage.py runserver,一切恢复正常,工作良好。


1
这个答案帮助了我找到解决方案,尽管我不能完全按照它的步骤操作,因为我无法运行任何manage.py命令而不看到这个错误(一个应用程序在初始化时尝试访问contenttypes,即使没有定义数据库,其他所有内容都依赖于它)。相反,我创建了一个单独的设置文件“initial.py”,其中只定义了django应用程序中的INSTALLED_APPS。我能够使用此设置模块首先运行迁移,然后切换到我的常规设置模块以完成所有项目特定的迁移。 - Brett
该异常是由于与MySQL操作有关的错误而引发的。例如:连接过多;无法解析主机名;握手失败;服务器正在关闭,通信错误等。 - bob marti

0

我曾经遇到过同样的问题。 在我的情况下,我使用Django 1.10创建了本地数据库,但是我需要使用旧版本的Django(1.7)进行一些测试,因此我删除了本地数据库并使用Django 1.7运行manage.py migrate,然后错误就消失了。

或者,可以将数据库保留并在需要时将其移回项目中,以便在使用Django 1.10运行项目时使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接