从Django 1.4向后迁移到Django 1.3

从Django 1.4向后迁移到Django 1.3,django,django-nonrel,Django,Django Nonrel,有时,我愚蠢、鲁莽和胆大包天的编程直觉会把我带到一些危险的地方: 我已经用sqlite3启动了Django 1.4应用程序,然后转移到mysql,这没什么大不了的。但后来我意识到我的模型非常适合NoSql模型,并决定尝试MongoDB,它是Django 1.3的一个分支,支持非关系数据库。1.4版还没有准备好使用 因此,我已经分支了我的repo,创建了我的virtualenv和pipango nonrel,但是当我运行/manage.py shell时,我收到了这个消息 Traceback (m

有时,我愚蠢、鲁莽和胆大包天的编程直觉会把我带到一些危险的地方:

我已经用sqlite3启动了Django 1.4应用程序,然后转移到mysql,这没什么大不了的。但后来我意识到我的模型非常适合NoSql模型,并决定尝试MongoDB,它是Django 1.3的一个分支,支持非关系数据库。1.4版还没有准备好使用

因此,我已经分支了我的repo,创建了我的virtualenv和pipango nonrel,但是当我运行
/manage.py shell
时,我收到了这个消息

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 429, in execute_from_command_line
    utility.execute()
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 252, in fetch_command
    app_name = get_commands()[subcommand]
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 101, in get_commands
    apps = settings.INSTALLED_APPS
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/utils/functional.py", line 276, in __getattr__
    self._setup()
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/conf/__init__.py", line 139, in __init__
    logging_config_func(self.LOGGING)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 776, in dictConfig
    dictConfigClass(config).configure()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 562, in configure
    'filter %r: %s' % (name, e))
ValueError: Unable to configure filter 'require_debug_false': Cannot resolve 'django.utils.log.RequireDebugFalse': No module named RequireDebugFalse
回溯(最近一次呼叫最后一次):
文件“/manage.py”,第10行,在
从命令行(sys.argv)执行命令
文件“/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site packages/django/core/management/__init__.py”,第429行,从命令行执行
utility.execute()
文件“/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site packages/django/core/management/_________.py”,执行中第379行
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site packages/django/core/management/__init__;.py”,第252行,在fetch_命令中
app_name=get_commands()[子命令]
文件“/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site packages/django/core/management/_init__.py”,第101行,在get_命令中
应用程序=设置。已安装的应用程序
文件“/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site packages/django/utils/functional.py”,第276行,位于__
self.\u设置()
文件“/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site packages/django/conf/_init__.py”,第42行,在设置中
自包装=设置(设置模块)
文件“/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site packages/django/conf/_init__.py”,第139行,在_init中__
日志记录\配置\函数(self.logging)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py”,第776行,在dictConfig中
dictConfigClass(config).configure()
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py”,第562行,在configure中
'筛选器%r:%s'(名称,e))
ValueError:无法配置筛选器“require_debug_false”:无法解析“django.utils.log.RequireDebugFalse”:没有名为RequireDebugFalse的模块

RequiredBugFalse在Django 1.4中是新的(请参阅和),我想1.4中的一些其他基础魔术新功能在这个新安装中也不会起作用。我想知道我是否可以将我的应用程序迁移回Django 1.3,而无需执行
Django-admin.py startproject
Django-admin.py startapp

如果您的项目中没有使用Django 1.4,您可以创建一个1.3项目并从那里复制日志设置。那你就没事了。

你可以这样做,尽管你可能想让大门敞开,让它再次前进

我过去处理这个问题的方法是,如果可能的话,不要对代码进行大量更改。相反,做你已经做过的事情——运行代码并等待它爆炸。确定问题的根源,然后执行以下操作之一:

  • 创建一个提供所需功能的存根(或者至少不做任何事情)
  • 将功能备份到您自己的1.3个人副本上,或
  • Monkey将该功能修补到未修改的1.3上。(我的建议)

除非您完全了解了1.4中的一些独特的新特性,否则您会惊讶地发现,您能够如此迅速地找到一个可用的环境。我有一个项目,猴子补丁文件只有大约100行长,在一个旧版本上改装了大约12个功能。

+1对于你的“愚蠢、鲁莽和胆大妄为的编程直觉”,你不觉得你有时生活在边缘吗Pi希望保持我的git回购协议完好无损,并在一个新的分支机构工作,其他方面,这听起来像是一个非常务实和简单的回答manage.py不会做任何事情。在我对settings.py文件的
LOGGING
部分进行注释后,第一个问题就消失了。然后我必须重写一些代码,以摆脱1.3中不支持的django.timezone,到目前为止一切正常。