Помимо того, что это плохая идея (все ваши URL ломаются каждый раз, когда вы редактируете заголовок), я бы сделал это с пользовательским событием. Вам придется скопировать некоторые функции, встроенные в архетипы, используемые при переименовании объектов при создании, потому что вы не хотите переименовывать каждый раз, когда редактируете:
from Products.Archetypes.interfaces import (
IBaseObject,
IObjectEditedEvent,
)
import re
from zope.component import adapter
endsWithNumber = re.compile('-\d+$')
@adapter(IBaseObject, IObjectEditedEvent)
def renameOnEdit(obj, event):
old_id = obj.getId()
without_number = endsWithNumber.sub('', old_id)
# New id based on Title
new_id = obj.generateNewId()
if new_id == old_id or new_id == without_number:
# No change
return
new_id = obj._findUniqueId(new_id)
if new_id is None:
# Couldn't find a new unique id (out of sequence numbers?)
return
obj.setId(new_id)