2009-12-28 65 views
2

我在Plone中有一个AT内容类型。它有许多字段,包括一个文件字段。当用户编辑这种类型的对象时,如何判断是否上传了新文件?如何判断一个字段是否在plone中的一个AT对象中改变了值?

对于这个问题,我该如何判断是否有任何字段已被更改?

我目前正在使用订阅者挂钩到IObjectEditedEvent做一些对象更改后 - 我可以在这里做这些事情吗?

回答

1

是,IObjectEditedEventIObjectModifiedEvent的直接子类)是在Archetypes内容对象正在更改时发出的。

但是,事件本身不会告诉您是否上传了新文件。然而,应该有可能获得请求(例如context.REQUEST应该通过获取来提供当前请求),并查看是否存在与该字段匹配的文件对象。如果是这样,则用户上传该字段的新文件并且FileField将被更新。

+0

谢谢;我使用了 request = zope.app.component.hooks.getSite()。请求 而不是上下文,然后检查 request.has_key('FileField_file') 这似乎只在FilField已更新时才会出现。 – askvictor 2009-12-31 00:15:40

0

这是我绑在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']可以有。它似乎很有用。

相关问题