Вышел ng.lib 0.0.5
2008-07-01 13:12В результате краткого обсуждение с Анатолием Бубенковым удалось предложить удобный способ использования в полях схем вычисляемых умолчаний, что достигается с помощью специальной фабрики полей DynamicDefault. Теперь поле, например, DateTime удобно определять так:
DynamicDefault(DateTime,title=u'date',default=now)
Функция now() будет вызвана в момент отрисовки поля.
Эта удобная возможность предоставляется продуктом ng.lib, начиная с версии 0.0.5.
Обычно, значения по умолчанию в схемах определяются так:
from zope.interface import Interface
from zope.schema import Datetime
class IA(Interface) :
""" Stupid Interface """
created = DateTime(title = u'Date/Time',
description = u'Date/Time',
default = datetime.datetime.today(),
required = True)
В этом случае значение по умолчанию вычисляется в момент старта сервера, и в дальнейшем остается неизменным. Существуют разные обходные способы решить это, например убрать поле из формы создания объекта и устанавливать значение в конструкторе класса.
Но с появлением фабрики DynamicDefault все значительно упростилось:
from zope.interface import Interface
from zope.schema import Datetime
from ng.lib.dynamicdefault.DynamicDefault
class IA(Interface) :
""" Stupid Interface """
created = DynamicDefault(DateTime,
title = u'Date/Time',
description = u'Date/Time',
default = datetime.datetime.today,
required = True)
При такой нотации, в качестве значения поля default передается функция, которая будет вызвана в момент отрисовки формы добавления и в ее поле появится текущее время, что значительно более полезно.
Аналогично, фабрика DynamicDefault может использоваться и для других полей, например, чтобы определить автора статьи или другие динамические параметры.
Продукт ng.lib содержит много других полезных решений, читайте документацию.



