django-composition
django-composition copied to clipboard
DSL for smart database fields denormalization
Description
django-composition
provides the abstract way to denormalize data from your models in simple declarative way through special generic model field called CompositionField
.
Most cases of data denormalization are pretty common so django-composition
has several "short-cuts" fields that handles most of them.
Base concept
CompositionField
is django model field that provides interface to data denormalization.
CompositionField
constructor params:
- native - Django field instance for current compostion field
- trigger - one or some numberr of triggers that handle composition. Trigger is a dict with allowed keys:
- on - signal or list of signals that this field handles
- do - signals handler, with 3 params:
- related instance
- instance (that comes with signal send)
- concrete signal (one from
on
value) - field_holder_getter - function that gets instance(that comes with signal send)
as parameter and returns field holder object (related instance) - sender - signal sender
- sender_model - model instance or model name that send signal
- commit - flag that indicates save instance after trigger appliance or not
- commons - a trigger like field with common settings for all given triggers
- update_method - dict for customization of update_method. Allowed params:
- initial - initial value to field before applince of method
- do - index of update trigger or trigger itself
- queryset - query set or callable(with one param -
instance
of an holder model) that have to retun something iterable - name - custom method name instead of
update_FOO
Short-cuts
Here is the list of provided short-cut fields:
-
ForeignAttributeField
-
ChildsAggregationField
-
AtributesAggregationField