Metadata on objects =================== The default dublin core implementation from CMF is used by dexterity in the Dublin Core behaviour, a subset of which is available in the Ownership, Basic Metadata, etc behaviours. When we create a dexterity content type:: >>> portal = layer['portal'] >>> from plone.dexterity.fti import DexterityFTI >>> fti = DexterityFTI('metadatad_type') >>> fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IDublinCore',) >>> portal.portal_types._setObject('metadatad_type', fti) 'metadatad_type' >>> schema = fti.lookupSchema() If we access the site as an admin TTW:: >>> from plone.app.testing import TEST_USER_ID, TEST_USER_NAME, TEST_USER_PASSWORD, setRoles >>> setRoles(portal, TEST_USER_ID, ['Manager']) >>> import transaction; transaction.commit() >>> from plone.testing.z2 import Browser >>> browser = Browser(layer['app']) >>> browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD,)) We can see this type in the addable types at the root of the site:: >>> browser.open("http://nohost/plone/folder_factories") >>> "metadatad_type" in browser.contents True >>> browser.getControl("metadatad_type").click() >>> browser.getControl("Add").click() >>> browser.getControl(name="form.widgets.IDublinCore.title").value = "My Object" >>> browser.getControl(name="form.widgets.IDublinCore.description").value = "Lorem ipsum" >>> browser.getControl(name="form.buttons.save").click() >>> browser.url 'http://nohost/plone/metadatad_type/view' The creator of the object is the current user:: >>> "http://nohost/plone/author/test_user_1_" in browser.contents True >>> md = portal.metadatad_type >>> md.Creator() 'test_user_1_' The modified and creation dates are set correctly:: >>> md.ModificationDate()[0:16] == md.CreationDate()[0:16] True >>> from DateTime import DateTime >>> DateTime() > DateTime(md.CreationDate()) True The creators field contains the current user as a unicode string, and you should be able to set same value without a validation error:: >>> from zope.schema import getFields >>> from plone.dexterity.utils import getAdditionalSchemata >>> schema = getAdditionalSchemata(context=md).next() >>> field = getFields(schema)['creators'] >>> field.get(field.interface(md)) (u'test_user_1_',) >>> field.set(field.interface(md), (u'test_user_1_',))