- Revert deepcopying model state to copy
- Update the initial state after calling
refresh_from_db
on the model instance. Thanks, @partizaans! - Refactor: Extract model state methods
- Fix imports
- Fix pypi release by explicitly include
conditions
folder
- Fix import errors
- Hook condition can be now built using some predefined conditions and/or with custom ones.
- Fix
has_changed
andchanged_to
when working with mutable data (i.e.:dict
s). Thanks @AlaaNour94
- Fix: Hooks were failing if some watched field (those in
when=""
orwhen_any=[...]
) was aGenericForeignKey
- Fix: Include missing
django_lifecycle_checks
into python package
- Drop support for Django < 2.2.
- Confirm support for Django 5.0. Thanks @adamchainz!
- Remove urlman from required packages. Thanks @DmytroLitvinov!
- Add an optional Django check to avoid errors by not inheriting from
LifecycleModelMixin
(orLifecycleModel
)
- Correct package info to note that Django 4.0, 4.1, and 4.2 are supported.
- Initial state gets reset using
transaction.on_commit()
, fixing thehas_changed()
andinitial_value()
methods for on_commit hooks. Thanks @alb3rto269!
- Drops Python 3.6 support
- Adds
priority
hook kwarg to control the order in which hooked methods fire. Thanks @EnriqueSoria! - Internal cleanup/refactoring. Thanks @EnriqueSoria!
- Adds missing
packaging
toinstall_requires
. Thanks @mikedep333!
- Makes the
has_changed
,changes_to
conditions depend on whether the field in question was included in the SQL update/insert statement by checking theupdate_fields
argument passed to save.
- Adds optional @hook
on_commit
argument for executing hooks when the database transaction is committed. Thanks @amcclosky!
- Correct packge info to note that Django 3.2 is supported.
- Run hooked methods inside transactions, just as signals do. Thanks @amirmotlagh!
- Makes hooks work with OneToOneFields. Thanks @bahmdev!
- Prevents calling a hooked method twice with the same state. Thanks @garyd203!
- Added missing return to
delete()
method override. Thanks @oaosman84!
- Significant performance improvements. Thanks @dralley!
- Fixes issue with
GenericForeignKey
. Thanks @bmbouter!
- Updates to use constants for hook names; updates docs to indicate Python 3.8/Django 3.x support. Thanks @thejoeejoee!
- Adds static typed variables for hook names; thanks @Faisal-Manzer!
- Fixes some typos in docs; thanks @tomdyson and @bmispelon!
- Fixes bug in
utils._get_field_names
that could cause recursion bug in some cases.
- Adds
changes_to
condition - thanks @samitnuk! Also some typo fixes in docs.
- Remove variable type annotation for Python 3.5 compatability.
- Adds
when_any
hook parameter to watch multiple fields for state changes
- Adds
was_not
condition - Allow watching changes to FK model field values, not just FK references
- Fixes missing README.md issue that broke install.
- Fixes urlman-compatability.
- Fixes
initial_value(field_name)
behavior - should return value even if no change. Thanks @adamJLev!
- Fixes bug preventing hooks from firing for custom PKs. Thanks @atugushev!
- Fixes m2m field bug, in which accessing auto-generated reverse field in
before_create
causes exception b/c PK does not exist yet. Thanks @garyd203!
- Resets model's comparison state for hook conditions after
save
called.
- Fixed support for adding multiple
@hook
decorators to same method.
- Removes residual mixin methods from earlier implementation.
- Save method now accepts
skip_hooks
, an optional boolean keyword argument that controls whether hooked methods are called.
- Fixed bug in
_potentially_hooked_methods
that caused unwanted side effects by accessing model instance methods decorated with@cache_property
or@property
.
- Added Django 1.8 support. Thanks @jtiai!
- Tox testing added for Python 3.4, 3.5, 3.6 and Django 1.8, 1.11 and 2.0. Thanks @jtiai!