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)

0 ответов

Другие вопросы по тегам