【发布时间】:2016-09-02 00:55:49
【问题描述】:
所以我将我的 Django 项目复制到一个新服务器,复制环境并将表导入本地 mysql 数据库。
但是当我尝试运行 makemigrations 时,它给了我 TypeError: allow_migrate() got an unexpected keyword argument 'model_name'
这是完整的堆栈跟踪:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/management/__init__.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/management/base.py", line 305, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/management/base.py", line 353, in execute
self.check()
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/management/base.py", line 385, in check
include_deployment_checks=include_deployment_checks,
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/management/base.py", line 372, in _run_checks
return checks.run_checks(**kwargs)
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/checks/registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/cicd/.local/lib/python2.7/site-packages/django/core/checks/model_checks.py", line 30, in check_all_models
errors.extend(model.check(**kwargs))
File "/home/cicd/.local/lib/python2.7/site-packages/django/db/models/base.py", line 1266, in check
errors.extend(cls._check_fields(**kwargs))
File "/home/cicd/.local/lib/python2.7/site-packages/django/db/models/base.py", line 1337, in _check_fields
errors.extend(field.check(**kwargs))
File "/home/cicd/.local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 893, in check
errors = super(AutoField, self).check(**kwargs)
File "/home/cicd/.local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 208, in check
errors.extend(self._check_backend_specific_checks(**kwargs))
File "/home/cicd/.local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 310, in _check_backend_specific_checks
if router.allow_migrate(db, app_label, model_name=self.model._meta.model_name):
File "/home/cicd/.local/lib/python2.7/site-packages/django/db/utils.py", line 300, in allow_migrate
allow = method(db, app_label, **hints)
TypeError: allow_migrate() got an unexpected keyword argument 'model_name'
如果能在调试此错误并尝试了解导致此错误的原因方面提供任何帮助,我将不胜感激。
【问题讨论】:
-
可能与此有关:docs.djangoproject.com/en/1.9/releases/1.8/…。您在新服务器上使用的是哪个版本的 Django?
-
是的,所以我确实从 1.9.4 移到了 1.10,但如果这会导致这种情况,因为您链接的此功能更改是从 1.8 到 1.9
-
降级到 1.9.4 解决了这个问题,感谢 elethan。但我仍然想知道为什么?
-
您实际上可能会尝试再次升级到 1.10,而无需进行任何其他更改。看起来
allow_migrate()在 1.10 或 1.9.4 中没有使用model_name参数,这使得您的服务器上有一些过时的.pyc文件,也许降级会将它们清除.只是猜测,但也许值得一试。 -
请注意,由 elethan 链接的
allow_migrate()的旧签名在 1.8 中已弃用。如果您在 1.9 上使用-Wall选项运行该代码,您应该会看到弃用警告,但旧签名仍然有效。它已在 1.10 中正确删除,这解释了您看到的错误。