

def _join_metadata(self):
    src = self.model_from_alias(self.src)
    dest = self.model_from_alias(self.dest)
    join_alias = ((isinstance(self.on, Node) and self.on._alias) or None)
    is_expression = isinstance(self.on, (Expression, Func, SQL))
    on_field = ((isinstance(self.on, (Field, FieldProxy)) and self.on) or None)
    if on_field:
        fk_field = primary_key
        is_backref = (on_field.name not in src._meta.fields)
    else:
        (fk_field, is_backref) = self.get_foreign_key(src, dest, self.on)
        if ((fk_field is None) and (self.on is not None)):
            (fk_field, is_backref) = self.get_foreign_key(src, dest)
    if (fk_field is not None):
        primary_key = fk_field.to_field
    else:
        primary_key = None
    if (not join_alias):
        if (fk_field is not None):
            if is_backref:
                target_attr = dest._meta.db_table
            else:
                target_attr = fk_field.name
        else:
            try:
                target_attr = self.on.lhs.name
            except AttributeError:
                target_attr = dest._meta.db_table
    else:
        target_attr = None
    return JoinMetadata(src_model=src, dest_model=dest, src=self.src, dest=self.dest, attr=(join_alias or target_attr), primary_key=primary_key, foreign_key=fk_field, is_backref=is_backref, alias=join_alias, is_self_join=(src is dest), is_expression=is_expression)

dataset/ETHPy150Open coleifer/peewee/peewee.py Join._join_metadata/VarMisuse@104/123 `on_field`->`primary_key`