Django-chamber¶
Chamber contains a collection of useful base model classes, form fields, model fields, decorators, or other shortcuts to aid web development in Django.
One can think of it as a toolbox with utilities that were too small to justify creating a standalone library and therefore ended up here. Hence the name Chamber. Its purpose is not unlike the discontinued EasyMode library.
Overview¶
Features¶
The most noteworthy part of Chamber is the alternative base class for Django models called SmartModel. It provides following additional features:
- adds
created_atandchanged_atdatetime fields on derived models, - splits the save method of Django model into several methods
_pre_save,_save,_post_savefor readability, - keeps track of whether the instance being saved is a new one or whether it is an update to an existing one,
- keeps track of which fields changed during the save method and this info is available even in the
_post_savemethod, - provides way to unclutter the save methods by declaring several types of model dispatchers, useful e.g. for sending notifications based on changes on the instance.
Other useful components include:
- AuditModel – adds
created_atandchanged_atfields to the basic Django model, - SmartQuerySet – adds
fast_distinctmethod to querysets (useful for PostgreSQL), - several enum classes such as
ChoicesNumEnumorSequenceChoiceEnum, - new Django-style shortcuts such as
get_object_or_none,change_and_save, orbulk_change_and_save. MigrationLoadFixtureclass that supports loading Django fixtures inside a database migration- …and more.
Contributing & Documentation¶
You are welcomed to contribute at https://github.com/druids/django-chamber. There is an example project in the repository. Your feature should be added to this example project with tests as well as the documentation.
# Go to the example directory and call make install to install it. # Run tests using make test.
Documentation is available at https://django-chamber.readthedocs.org/en/latest.
Known Issues¶
- this documentation is a work in progress, needs a lot of attention
- SmartModel extends the AuditModel and therefore always adds created_at and changed_at fields to the model which is not always desirable