将my.packages重命名为my.package

mar*_*arr 5 plone zodb

my.packages是src目录中的自定义archetypes包.Plone实例中的数千个项目都添加了其类型.我想将包重命名为my.package.通过简单的卸载my.packages和安装my.package,我找到的http://本地主机:8080/mysite的/ MyFolder中/我的项目展示<persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'>.我应该做迁移吗?或者有一种简单的方法可以解决这个问题吗?

Mar*_*ers 5

您可以通过fudzing为后向兼容性创建别名sys.modules.在您的包中执行此操作__init__.py:

 import sys
 sys.modules['my.packages'] = sys.modules[__name__]
Run Code Online (Sandbox Code Playgroud)

这样,持久性机制仍然可以找到你的类.

会发生的情况是,当您的Archetypes实例持久存储在ZODB中时,持久性机制会my.packages.types.foobar.FooBar在存储的数据中存储类的模块路径(如点的python路径).从ZODB恢复对象时,将使用相同的路径重新创建实例.重命名包时,所有这些引用都会被破坏.

通过上述技巧,好处是如果您的对象在事务中被更改并再次写入ZODB,则将存储新的模块路径.因此,您可以设想从此程序包中写入所有Archetypes实例以使迁移成为永久迁移,以便您可以再次删除上述解决方法.