Source

django-composition / README

Full commit
## 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`