Skip to main content

Django Model Signals makes it easier to keep model related business logic in your Django models by allowing them to become transceivers of their own signals, including bulk signals.

Project description

Django Model Signals

Django Model Signals makes it easier to keep business logic in your Django models by allowing them to become transceivers of their own signals, including bulk signals.

Installation

pip install django-model-signals

Configuration

Add the django_model_signals app to your INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    'django_model_signals',
]

Usage

  • Add a ModelSignalsMeta inner class to your Django model and specify which signals you want to connect.
  • To enable the pre_bulk_save and post_bulk_save signals, add the ModelSignalsManager to your Django model's objects property.
  • To enable the pre_full_clean, post_full_clean and post_full_clean_error signals, inherit from the FullCleanSignalsMixin in your Django model.
  • To enable the post_save_error signal, inherit from the PostSaveErrorSignalMixin in your Django model.
  • Implement the receiver methods for the connected signals in your Django model.

Example

from django.db.models import Model
from django_model_signals.manager import ModelSignalsManager
from django_model_signals.models import (
  FullCleanSignalsMixin,
  PostSaveErrorSignalMixin
)


class MyModel(
    FullCleanSignalsMixin,
    PostSaveErrorSignalMixin,
    Model
):

    @classmethod
    def pre_init(cls, **kwargs):
        pass

    def post_init(self, **kwargs):
        pass

    def pre_full_clean(self, **kwargs):
        pass

    def post_full_clean(self, **kwargs):
        pass

    def post_full_clean_error(self, **kwargs):
        raise kwargs['error']

    def pre_save(self, **kwargs):
        pass

    def post_save(self, **kwargs):
        pass

    def post_save_error(self, **kwargs):
        raise kwargs['error']

    def pre_delete(self, **kwargs):
        pass

    def post_delete(self, **kwargs):
        pass

    def m2m_changed(self, **kwargs):
        pass

    @classmethod
    def pre_bulk_save(cls, **kwargs):
      pass

    @classmethod
    def post_bulk_save(cls, **kwargs):
      pass

    objects = ModelSignalsManager()

    class ModelSignalsMeta:
        signals = [
            'pre_init',
            'post_init',
            'pre_full_clean',
            'post_full_clean',
            'post_full_clean_error',
            'pre_save',
            'post_save',
            'post_save_error',
            'pre_delete',
            'post_delete',
            'm2m_changed',
            'pre_bulk_save',
            'post_bulk_save'
        ]

Notes

  • The following actions are supported for triggering the implemented signals:
    • Creating or loading an model instance from the database will trigger the pre_init and post_init signals.
    • Calling Model.full_clean will trigger the pre_full_clean and post_full_clean signals.
    • An error during Model.full_clean will trigger the post_full_clean_error signal.
    • Calling Model.save will trigger the pre_save and post_save signals.
    • An error during Model.save will trigger the post_save_error signal.
    • Calling Model.delete will trigger the pre_delete and post_delete signals.
    • Calling Model.objects.create will trigger the pre_save and post_save signals.
    • Calling Model.objects.get_or_create will trigger the pre_save and post_save signals.
    • Calling Model.objects.update_or_create will trigger the pre_save and post_save signals.
    • Calling Model.objects.bulk_create will trigger the pre_bulk_save and post_bulk_save signals.
    • Calling Model.objects.bulk_update will trigger the pre_bulk_save and post_bulk_save signals.
    • Calling QuerySet.delete will trigger the pre_delete and post_delete signals.
  • To implement the pre_full_clean and post_full_clean, post_full_clean_error and post_save_errors signals, this library overrides the full_clean and save methods of Django models and calls the original method in a backwards compatible way. However, make sure the order of the classes inherited from is the same as the above example to ensure the proper method resolution order.
  • The post_full_clean_error and post_save_error signals are not actually called as signals, but the receiver methods are called directly. This allows you to suppress, change or re-raise the error.

Resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_model_signals-0.4.3.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_model_signals-0.4.3-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file django_model_signals-0.4.3.tar.gz.

File metadata

  • Download URL: django_model_signals-0.4.3.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for django_model_signals-0.4.3.tar.gz
Algorithm Hash digest
SHA256 f87cf6ea6e7381c7d028e6f95c885b340a90bb6fa84cd41f5152476924ac40fe
MD5 baefa1c15e79470eeb74c9146e50cd28
BLAKE2b-256 bcebab58640a4ad615a40bcb83e61d7e9c83dcab2f9d06da05a0afe9497ae1b7

See more details on using hashes here.

File details

Details for the file django_model_signals-0.4.3-py3-none-any.whl.

File metadata

File hashes

Hashes for django_model_signals-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0f4188c9736ccaa9a5c118f3496c33e8eb205919122fd5450a0b237b3cbc2177
MD5 efd347b8d9af5fa1872df417ad6ebef1
BLAKE2b-256 99a4b88b5094c5711e84919ae073f2092edd6d55cf6109011373bf16e844d910

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page