,我有一個控制面板頁面,可以在其中設置一些配置選項。它們存儲在plone.registry中。向plone.registry添加新記錄而不重新運行GenericSetup /在Plone附加產品中重新安裝產品
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的:控制面板適配器通過查詢界面,就像在獲取其__init__
方法的不同領域。控制面板上的頁面我然後一個錯誤:
KeyError: 'Interface `plone.app.multilingual.interfaces.IMultiLanguageExtraOptionsSchema` defines a field `blah`, for which there is no record.'
(這是預期爲forInterface
方法中,作爲在plone.registry自述描述的記錄是不存在。)
當然,如果我通過GenericSetup(registry.xml)加入該域,然後我重新安裝產品/重新運行「控制面板」的步驟,一切都很好:
<registry>
<records interface="plone.app.multilingual.interfaces.IMultiLanguageExtraOptionsSchema">
<value key="blah"></value>
<records>
<registry>
但我不希望強迫用戶重新安裝產品,只是因爲產品特定的控制面板中有一個新選項。所以我的問題:是否有一個建議的方式獲得一個新的記錄到plone.registry的新字段?
謝謝,添加'check = False'可用於顯示控制面板。但試圖保存(=設置一個新值)將導致AttributeError。 我現在的解決方案:在控制面板適配器內的set_blah方法中,我檢查註冊中心是否已經有相關名稱的記錄,如果沒有,我創建一個plone.registry.Record()(如README)並將其保存爲默認值。這發生在從窗體('self.setting.blah = value')傳入的值的實際設置之前 – pysailor 2013-03-13 08:44:55