在 Plone 附加产品中,我有一个控制面板页面,可以在其中设置一些配置选项。它们存储在 plone.registry 中。__init__
控制面板适配器通过查询接口来获取其方法中的不同字段,例如:
class MultiLanguageExtraOptionsAdapter(LanguageControlPanelAdapter):
implementsOnly(IMultiLanguageExtraOptionsSchema)
def __init__(self, context):
super(MultiLanguageExtraOptionsAdapter, self).__init__(context)
self.registry = getUtility(IRegistry)
self.settings = self.registry.forInterface(
IMultiLanguageExtraOptionsSchema)
现在我在接口 IMultiLanguageExtraOptionsSchema 中添加一个附加字段并重新启动 plone。然后在控制面板页面上出现错误:
KeyError: 'Interface `plone.app.multilingual.interfaces.IMultiLanguageExtraOptionsSchema` defines a field `blah`, for which there is no record.'
(如 plone.registry README 中所述,这对于方法是预期的forInterface
。该记录不存在。)
当然,如果我通过 GenericSetup (registry.xml) 添加该字段,然后重新安装产品/重新运行“控制面板”步骤,一切都很好:
<registry>
<records interface="plone.app.multilingual.interfaces.IMultiLanguageExtraOptionsSchema">
<value key="blah"></value>
<records>
<registry>
但我不想强迫用户重新安装产品,仅仅因为产品特定的控制面板中有一个新选项。所以我的问题是:有没有推荐的方法来获取新字段的新记录到 plone.registry 中?