Plone 4: изменение имени входа в форме электронной почты @@

Я создал пользовательскую форму для добавления полей в форму личной информации @@. Я обнаружил, что имя входа можно изменить, используя set_own_login_name() которое предоставляется Products.CMFPlone.utils

В моем адаптере формы у меня есть что-то вроде этого:

 def get_username(self): prop = self.context.getUserName() return prop def set_username(self, value): id = self.context.getProperty('id', '') value = id if (value == None) else value return utils.set_own_login_name(self.context, value) username = property(get_username, set_username) 

Имя login_ изменяется, но после нажатия кнопки «Сохранить» в форме форма по-прежнему показывает исходное значение. После обновления страницы (без повторной отправки формы) она показывает правильное значение.

Итак, как я могу заставить get_username() переиндексировать свойство или заставить новое имя login_ быть возвращенным без обновления страницы?

ОБНОВЛЕНИЕ: я обнаружил, что я могу перенаправить, и это исправляет проблему, но я надеюсь, что у кого-то есть более элегантное решение. Похоже, что должен быть более прямой способ обновления собственности. Вот мое обходное решение:

 data = {} def get_username(self): prop = self.context.getUserName() self.data = {'old': prop, 'new': prop} return prop def set_username(self, value): id = self.context.getProperty('id', '') value = id if (value == None) else value self.data['new'] = value return utils.set_own_login_name(self.context, value) username = property(get_username, set_username) def __del__(self): if (self.data['new'] != self.data['old']): portalUrl = getToolByName(self.context, 'portal_url')() self.context.REQUEST.response.redirect(("%s/@@personal-information") % portalUrl) 

Python - лучший язык программирования в мире.