Как я могу определить, изменило ли поле значение в объекте AT в plone?
-
21-09-2019 - |
Вопрос
У меня есть тип контента AT в Plone.Он содержит несколько полей, включая поле файла.Когда пользователь редактирует объект этого типа, как я могу определить, был ли загружен новый файл?
Если уж на то пошло, как я могу определить, было ли изменено какое-либо из полей?
В настоящее время я использую подписчиков для подключения к 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']
может иметь.Это кажется полезным.