Формы Plone Dexterity. Можно ли установить значение по умолчанию для поля, равное значению, возвращаемому функцией в форме добавления?

У меня есть тип контента ловкости, и я следую руководству по типам, управляемым схемой, из Руководства по ловкости (http://docs.plone.org/external/plone.app.dexterity/docs/schema-driven-types.html#the-schema), и я пытаюсь изменить значение поля по умолчанию.

Возвращаемое значение основано на поиске в каталоге портала. Поле имеет тип int, в котором я хочу, чтобы оно было равно наибольшему числу + 1 рассматриваемого поля. Поскольку это поле я хочу скрыть, я подумал, что, возможно, можно будет установить значение по умолчанию, вернув значение из значения функции в параметр поля по умолчанию.

Вот мой интерфейс:

class ISupplier(model.Schema):

    """
    Supplier of an asset or services
    """
    supplier_id = schema.Int(
                  title=_(u"Supplier ID"),
                  description=_(u"ID that links to the database"),
                  required=True,
                  default=newID
        )
    ...

Вот моя функция, которую я пытаюсь использовать для возврата значения. Это вне занятий.

@grok.provider(IContextSourceBinder)
def newID(context):
    limit = 1
    catalog = getToolByName(context, 'portal_catalog')
    result = catalog.searchResults(portal_type='gpcl.supplier.supplier',
                                                sort_on='supplier_id',
                                                sort_order='descending', 
                                                sort_limit=limit

        )[:1]
    return result.supplier_id + 1

Причина, по которой я думал, что можно сделать что-то подобное, заключается в том, что в поле типа выбора я установил источник, равный значению, возвращаемому функцией:

form.widget(supplierType=CheckBoxFieldWidget)
supplierType = schema.List(title=u'Types',
                           value_type=schema.Choice(source=supplierTypes),
                           required=True

SupplierTypes, функция, начинается так:

@grok.provider(IContextSourceBinder)
def supplierTypes(context):
    """
    """
    ...

Я пытался использовать default_value:

@form.default_value(field=ISupplier['supplier_id'])
def supplierIDDefaultValue(data):
    defaultID = newID
    return defaultID

К сожалению, это не сработало. Я считаю, что на самом деле у меня может быть неправильное понимание. Если бы я мог получить любую помощь, я был бы очень признателен.


person Patrick Downey    schedule 02.09.2014    source источник
comment
Поскольку я знаю, что plone.directives.form.default_value - это путь, я не знаю, почему он не работает для вас. Но вы также можете попробовать zope.schema defaultFactory (я использовал его вне ловкости)   -  person keul    schedule 02.09.2014
comment
Мне удалось заставить работать default_value. Я не знал, что данные имеют свойство контекста, пока не нашел это: stackoverflow.com/questions/11138524/ Это действительно отбросило меня назад. Я рад, что смог заставить этот идентификатор работать.   -  person Patrick Downey    schedule 02.09.2014