'Initialize the ExtendedLeaf
:attr [string, tuple] leaf: operator or tuple-formatted domain
expression
:attr obj model: current working model
:attr list _models: list of chained models, updated when
adding joins
:attr list join_context: list of join contexts. This is a list of
tuples like ``(lhs, table, lhs_col, col, link)``
where
lhs
source (left hand) model
model
destination (right hand) model
lhs_col
source model column for join condition
col
destination model column for join condition
link
link column between source and destination model
that is not necessarily (but generally) a real column used
in the condition (i.e. in many2one); this link is used to
compute aliases'

def __init__(self, leaf, model, join_context=None, internal=False):

    assert isinstance(model, BaseModel), 'Invalid    leaf    creation    without    table'
    self.join_context = (join_context or [])
    self.leaf = leaf
    self.normalize_leaf()
    self.model = model
    self._models = []
    for item in self.join_context:
        self._models.append(item[0])
    self._models.append(model)
    self.check_leaf(internal)
