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
ModelSignalsMetainner class to your Django model and specify which signals you want to connect. - To enable the
pre_bulk_saveandpost_bulk_savesignals, add theModelSignalsManagerto your Django model'sobjectsproperty. - To enable the
pre_full_clean,post_full_cleanandpost_full_clean_errorsignals, inherit from theFullCleanSignalsMixinin your Django model. - To enable the
post_save_errorsignal, inherit from thePostSaveErrorSignalMixinin 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_initandpost_initsignals. - Calling
Model.full_cleanwill trigger thepre_full_cleanandpost_full_cleansignals. - An error during
Model.full_cleanwill trigger thepost_full_clean_errorsignal. - Calling
Model.savewill trigger thepre_saveandpost_savesignals. - An error during
Model.savewill trigger thepost_save_errorsignal. - Calling
Model.deletewill trigger thepre_deleteandpost_deletesignals. - Calling
Model.objects.createwill trigger thepre_saveandpost_savesignals. - Calling
Model.objects.get_or_createwill trigger thepre_saveandpost_savesignals. - Calling
Model.objects.update_or_createwill trigger thepre_saveandpost_savesignals. - Calling
Model.objects.bulk_createwill trigger thepre_bulk_saveandpost_bulk_savesignals. - Calling
Model.objects.bulk_updatewill trigger thepre_bulk_saveandpost_bulk_savesignals. - Calling
QuerySet.deletewill trigger thepre_deleteandpost_deletesignals.
- Creating or loading an model instance from the database will trigger the
- To implement the
pre_full_cleanandpost_full_clean,post_full_clean_errorandpost_save_errorssignals, this library overrides thefull_cleanandsavemethods 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_errorandpost_save_errorsignals 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
- Django: https://www.djangoproject.com/
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f87cf6ea6e7381c7d028e6f95c885b340a90bb6fa84cd41f5152476924ac40fe
|
|
| MD5 |
baefa1c15e79470eeb74c9146e50cd28
|
|
| BLAKE2b-256 |
bcebab58640a4ad615a40bcb83e61d7e9c83dcab2f9d06da05a0afe9497ae1b7
|
File details
Details for the file django_model_signals-0.4.3-py3-none-any.whl.
File metadata
- Download URL: django_model_signals-0.4.3-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f4188c9736ccaa9a5c118f3496c33e8eb205919122fd5450a0b237b3cbc2177
|
|
| MD5 |
efd347b8d9af5fa1872df417ad6ebef1
|
|
| BLAKE2b-256 |
99a4b88b5094c5711e84919ae073f2092edd6d55cf6109011373bf16e844d910
|