

def prefetch_add_subquery(sq, subqueries):
    fixed_queries = [PrefetchResult(sq)]
    for (i, subquery) in enumerate(subqueries):
        if isinstance(subquery, tuple):
            (subquery, target_model) = subquery
        else:
            target_model = None
        if ((not isinstance(subquery, Query)) and issubclass(subquery, Model)):
            subquery = subquery.select()
        subquery_model = subquery.model_class
        fks = backrefs = None
        for j in reversed(range((i + 1))):
            prefetch_result = fixed_queries[j]
            last_query = prefetch_result.query
            last_model = prefetch_result.model
            rels = subquery_model._meta.rel_for_model(last_model, multi=True)
            if rels:
                fks = [getattr(subquery_model, fk.name) for fk in rels]
                pks = [getattr(last_model, fk.to_field.name) for fk in rels]
            else:
                backrefs = last_model._meta.rel_for_model(subquery_model, multi=True)
            if ((fks or backrefs) and ((target_model is last_model) or (cleaned is None))):
                break
        if (not (fks or backrefs)):
            tgt_err = ((' using %s' % target_model) if target_model else '')
            raise AttributeError(('Error: unable to find foreign key for query: %s%s' % (subquery, tgt_err)))
        if fks:
            cleaned = clean_prefetch_subquery(last_query)
            expr = reduce(operator.or_, [(fk << cleaned.select(pk)) for (fk, pk) in zip(fks, pks)])
            subquery = subquery.where(expr)
            fixed_queries.append(PrefetchResult(subquery, fks, False))
        elif backrefs:
            cleaned = clean_prefetch_subquery(last_query)
            expr = reduce(operator.or_, [(backref.to_field << cleaned.select(backref)) for backref in backrefs])
            subquery = subquery.where(expr)
            fixed_queries.append(PrefetchResult(subquery, backrefs, True))
    return fixed_queries

dataset/ETHPy150Open coleifer/peewee/peewee.py prefetch_add_subquery/VarMisuse@235/324 `target_model`->`cleaned`