我在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