2.7. Signals

New in version 0.5.

Note

Signal support is provided by the excellent blinker library and will gracefully fall back if it is not available.

The following document signals exist in MongoEngine and are pretty self-explanatory:

  • mongoengine.signals.pre_init
  • mongoengine.signals.post_init
  • mongoengine.signals.pre_save
  • mongoengine.signals.post_save
  • mongoengine.signals.pre_delete
  • mongoengine.signals.post_delete
  • mongoengine.signals.pre_bulk_insert
  • mongoengine.signals.post_bulk_insert

Example usage:

from mongoengine import *
from mongoengine import signals

class Author(Document):
    name = StringField()

    def __unicode__(self):
        return self.name

    @classmethod
    def pre_save(cls, sender, document, **kwargs):
        logging.debug("Pre Save: %s" % document.name)

    @classmethod
    def post_save(cls, sender, document, **kwargs):
        logging.debug("Post Save: %s" % document.name)
        if 'created' in kwargs:
            if kwargs['created']:
                logging.debug("Created")
            else:
                logging.debug("Updated")

signals.pre_save.connect(Author.pre_save, sender=Author)
signals.post_save.connect(Author.post_save, sender=Author)

2.7.1. ReferenceFields and signals

Currently reverse_delete_rules do not trigger signals on the other part of the relationship. If this is required you must manually handled the reverse deletion.