Plone 4: изменение имени пользователя в @@ личной информации
Я создал пользовательскую форму для добавления полей в форму @@personal-information. Я обнаружил, что имя пользователя можно изменить с помощью 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)
Имя_ логина изменяется, но после нажатия кнопки "Сохранить" на форме в форме все равно отображается исходное значение. После обновления страницы (без повторной отправки формы) она показывает правильное значение.
Так как я могу заставить get_username()
переиндексировать свойство или заставить новое имя_ логина возвращаться без обновления страницы?
ОБНОВЛЕНИЕ: я обнаружил, что могу перенаправить, и это решает проблему, но я надеюсь, что у кого-то есть более элегантное решение. Кажется, должен быть более простой способ обновления свойства. Вот мой обходной путь:
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)