在以下情况下我需要一些帮助:我需要实现一个自定义事件/订阅者,以便能够在其版本的开头和结尾获取对象的上下文,因为我需要比较状态在这两种情况下对象的某些字段。
有什么办法吗?是否有可能在所有编辑过程中都有一个实时/执行的处理程序(它的开始和更改的合并)?也许使用线程?
提前感谢您的帮助!
在以下情况下我需要一些帮助:我需要实现一个自定义事件/订阅者,以便能够在其版本的开头和结尾获取对象的上下文,因为我需要比较状态在这两种情况下对象的某些字段。
有什么办法吗?是否有可能在所有编辑过程中都有一个实时/执行的处理程序(它的开始和更改的合并)?也许使用线程?
提前感谢您的帮助!
考虑覆盖您的编辑表单以获得您想要的内容,而不是在这里尝试使用订阅者——这可能看起来像:
from plone.dexterity.browser.edit import DefaultEditForm as BaseForm
class ComparisonEditForm(BaseForm):
def update(self, *args, **kwargs):
existing_value = self.context.mykey
BaseForm.update(self, *args, **kwargs)
updated_value = self.context.mykey
if existing_value != updated_value:
pass # DO SOMETHING HERE
然后在 ZCML 或其他东西中注册一个覆盖。YMMV,我没有尝试过,但我认为一般的想法应该可行。