我在Plone中有一个AT内容类型。它有许多字段,包括一个文件字段。当用户编辑这种类型的对象时,如何判断是否上传了新文件?如何判断一个字段是否在plone中的一个AT对象中改变了值?
对于这个问题,我该如何判断是否有任何字段已被更改?
我目前正在使用订阅者挂钩到IObjectEditedEvent做一些对象更改后 - 我可以在这里做这些事情吗?
我在Plone中有一个AT内容类型。它有许多字段,包括一个文件字段。当用户编辑这种类型的对象时,如何判断是否上传了新文件?如何判断一个字段是否在plone中的一个AT对象中改变了值?
对于这个问题,我该如何判断是否有任何字段已被更改?
我目前正在使用订阅者挂钩到IObjectEditedEvent做一些对象更改后 - 我可以在这里做这些事情吗?
是,IObjectEditedEvent
(IObjectModifiedEvent
的直接子类)是在Archetypes内容对象正在更改时发出的。
但是,事件本身不会告诉您是否上传了新文件。然而,应该有可能获得请求(例如context.REQUEST应该通过获取来提供当前请求),并查看是否存在与该字段匹配的文件对象。如果是这样,则用户上传该字段的新文件并且FileField
将被更新。
这是我绑在IObjectEditedEvent:
使用从继承ATBlob, 实施(IATBlobFile,IATFile,IFileContent)创建的默认形式
def editObjectEvent(context, event):
status = context.REQUEST.form.get('file_delete')
if status in ("nochange", NONE):
print "Don't do anything, no change to file."
else:
print "Do something, the file has changed"
我想知道还有什么其他值form['file_delete']
可以有。它似乎很有用。
谢谢;我使用了 request = zope.app.component.hooks.getSite()。请求 而不是上下文,然后检查 request.has_key('FileField_file') 这似乎只在FilField已更新时才会出现。 – askvictor 2009-12-31 00:15:40