Skip to main content

Lifecycle-style hooks for Django bulk operations like bulk_create and bulk_update.

Project description

django-bulk-hooks

⚡ Salesforce-style hooks hooks for Django bulk operations.

django-bulk-hooks brings a declarative, trigger-like experience to Django's bulk_create, bulk_update, and bulk_delete — including support for BEFORE_ and AFTER_ hooks, conditions, batching, and transactional safety.

✨ Features

  • Declarative hook system: @hook(AFTER_UPDATE, condition=...)
  • BEFORE/AFTER hooks for create, update, delete
  • Salesforce-style semantics with full batch support
  • Lifecycle-aware manager that wraps Django’s bulk_ operations
  • Hook chaining, trigger deduplication, and atomicity
  • Class-based hook handlers with DI support

🚀 Quickstart

pip install django-bulk-hooks

Define Your Model

from django.db import models
from django_bulk_hooks.manager import BulkLifecycleManager

class Account(models.Model):
    balance = models.DecimalField(max_digits=10, decimal_places=2)
    objects = BulkLifecycleManager()

Create a Trigger Handler

from django_bulk_hooks import hook, AFTER_UPDATE, TriggerHandler
from django_bulk_hooks.conditions import WhenFieldHasChanged
from .models import Account

class AccountTriggerHandler(TriggerHandler):
    @hook(AFTER_UPDATE, model=Account, condition=WhenFieldHasChanged("balance"))
    def log_balance_change(self, new_objs):
        print("Accounts updated:", [a.pk for a in new_objs])

🛠 Supported Lifecycle Events

  • BEFORE_CREATE, AFTER_CREATE
  • BEFORE_UPDATE, AFTER_UPDATE
  • BEFORE_DELETE, AFTER_DELETE

🧠 Why?

Django’s bulk_ methods bypass signals and save(). This package fills that gap with:

  • Triggers that behave consistently across creates/updates/deletes
  • Scalable performance via chunking (default 200)
  • Support for @hook decorators and centralized trigger classes

📦 Usage in Views / Commands

# Calls AFTER_UPDATE hooks automatically
Account.objects.bulk_update(accounts, ['balance'])

# Triggers BEFORE_CREATE and AFTER_CREATE
Account.objects.bulk_create(accounts)

🧩 Integration with Queryable Properties

You can extend from BulkLifecycleManager to support formula fields or property querying.

class MyManager(BulkLifecycleManager, QueryablePropertiesManager):
    pass

📝 License

MIT © 2024 Augend / Konrad Beck

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

django_bulk_hooks-0.1.57.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

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

django_bulk_hooks-0.1.57-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file django_bulk_hooks-0.1.57.tar.gz.

File metadata

  • Download URL: django_bulk_hooks-0.1.57.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.11.9 Windows/10

File hashes

Hashes for django_bulk_hooks-0.1.57.tar.gz
Algorithm Hash digest
SHA256 0c74a6cf7cdf0b062645db4d4677c635429b626f393c687e1d75b4524d65a2d0
MD5 1d213c2d827943baddfc52836a88af9b
BLAKE2b-256 d62a4d06b7b7d534b6e391925cfa4c6a8cdcd4f3aef72ba5c1a575621b19bb8c

See more details on using hashes here.

File details

Details for the file django_bulk_hooks-0.1.57-py3-none-any.whl.

File metadata

File hashes

Hashes for django_bulk_hooks-0.1.57-py3-none-any.whl
Algorithm Hash digest
SHA256 f9287fb7f28a856487b665ba11c7dee5a0634aca9939eea0681c085cab20656f
MD5 8ecb28c6933829dfbd7dbeac24d4b54c
BLAKE2b-256 99cc1a522a75440ccb5f9bf128c4e6db3478c93f99a106c3308edb2440ef75d5

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