Skip to content

netinsideout/django-composition

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

About

DSL for smart database fields denormalization

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%