gpt4 book ai didi

python - 如何覆盖 z3c.form 按钮操作处理程序?

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:10 24 4
gpt4 key购买 nike

默认的 Dexterity 添加表单这样注册保存按钮和处理程序:

@button.buttonAndHandler(_('Save'), name='save')
def handleAdd(self, action):
data, errors = self.extractData()
if errors:
self.status = self.formErrorsMessage
return
obj = self.createAndAdd(data)
if obj is not None:
# mark only as finished if we get the new object
self._finishedAdd = True
IStatusMessage(self.request).addStatusMessage(
self.success_message, "info"
)

如何用我自己的处理程序覆盖(仅)处理程序?我宁愿只注册一些适配器,但如果注册一个子类化的自定义表单是唯一的选择,那也是可以接受的。

最佳答案

根据您的需要,覆盖 createAndAdd 就足够了,但一般来说您可以做类似的事情:

特别是您可以使用原始类的处理程序做类似的事情(第 50 行):

@button.buttonAndHandler(_(u'I am sure, delete now'), name='Delete')
def handle_delete(self, action):
base_handler = super(PIDeleteConfirmationForm, self).handle_delete
return base_handler(self, action)

当然,您可以在 base_handler 调用前后添加自定义代码。

此外,您还可以使用 updateActions 方法(请参阅第 28 行)。

请记住,当您想要覆盖按钮时,您必须覆盖所有按钮。

另一个提示是,为了自定义您的++add++your.portal.type 遍历器,您必须注册同名适配器:

<adapter
for="Products.CMFCore.interfaces.IFolderish
Products.CMFDefault.interfaces.ICMFDefaultSkin
plone.dexterity.interfaces.IDexterityFTI"
provides="zope.publisher.interfaces.browser.IBrowserPage"
factory=".mytype.AddView"
name="your.portal.type"
/>

参见 http://docs.plone.org/develop/plone/content/dexterity.html#custom-add-form-view

关于python - 如何覆盖 z3c.form 按钮操作处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com