diff --git a/docs/listeners.rst b/docs/listeners.rst index 554edcf..f2d9b41 100644 --- a/docs/listeners.rst +++ b/docs/listeners.rst @@ -5,3 +5,5 @@ Listeners .. module:: sqlalchemy_utils.listeners .. autofunction:: force_auto_coercion + +.. autofunction:: force_instant_defaults diff --git a/sqlalchemy_utils/listeners.py b/sqlalchemy_utils/listeners.py index 2d7082d..03edcb5 100644 --- a/sqlalchemy_utils/listeners.py +++ b/sqlalchemy_utils/listeners.py @@ -73,4 +73,34 @@ def force_auto_coercion(mapper=None): def force_instant_defaults(mapper=sa.orm.mapper): + """ + Function that assigns object column defaults on object initialization + time. By default calling this function applies instant defaults to all + your models. + + Setting up instant defaults:: + + + from sqlalchemy_utils import force_instant_defaults + + + force_instant_defaults() + + Example usage:: + + + class Document(Base): + __tablename__ = 'document' + id = sa.Column(sa.Integer, autoincrement=True) + name = sa.Column(sa.Unicode(50)) + created_at = sa.Column(sa.DateTime, default=datetime.now) + + + document = Document() + document.created_at # datetime object + + + :param mapper: The mapper which the automatic instant defaults forcing + should be applied to + """ sa.event.listen(mapper, 'init', instant_defaults_listener)