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.'
(これはforInterface
、plone.registry READMEで説明されているように、メソッドに期待されます。レコードはありません。)
もちろん、GenericSetup(registry.xml)を介してそのフィールドを追加し、製品を再インストールするか、「コントロールパネル」ステップを再実行すると、すべて問題ありません。
<registry>
<records interface="plone.app.multilingual.interfaces.IMultiLanguageExtraOptionsSchema">
<value key="blah"></value>
<records>
<registry>
ただし、製品固有のコントロールパネルに新しいオプションがあるという理由だけで、ユーザーに製品の再インストールを強制したくありません。だから私の質問:新しいフィールドの新しいレコードをplone.registryに入れるための推奨される方法はありますか?