Plone 4: cambiar el nombre de inicio de sesión en el formulario @@ personal-information

He creado un formulario personalizado para agregar campos al formulario @@ personal-information. Encontré que el nombre de inicio de sesión se puede cambiar usando set_own_login_name() que es proporcionado por Products.CMFPlone.utils

En mi adaptador de formulario, tengo algo como esto:

 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) 

Se está cambiando el nombre de inicio de sesión, pero después de hacer clic en el botón “Guardar” en el formulario, el formulario aún muestra el valor original. Al actualizar la página (sin volver a enviar el formulario), se muestra el valor correcto.

Entonces, ¿cómo puedo forzar que get_username() vuelva a indexar la propiedad o hacer que el nuevo login_name sea devuelto sin una actualización de la página?

ACTUALIZACIÓN: descubrí que puedo redirigir y soluciona el problema, pero espero que alguien tenga una solución más elegante. Parece que debería haber una forma más sencilla de actualizar la propiedad. Aquí está mi solución:

 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)