traversal.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:idealoom 作者: conversence 项目源码 文件源码
def decorate_query(
            self, query, owner_alias, coll_alias, parent_instance, ctx):
        # This will decorate a query with a join on the relation.
        inv = self.back_relation
        if inv:
            query = query.join(owner_alias,
                               getattr(coll_alias, inv.key))
        else:
            # hope for the best
            try:
                query = query.join(owner_alias)
            except InvalidRequestError:
                log.error("Could not join %s to %s" % (owner_alias, query))
                # This is very likely to fail downstream
                return query
        found_key = False
        if inv and not uses_list(inv):
            # Try to constrain on coll_alias's key vs owner_alias.
            # Difficult cases happen when tombstone is part of the
            # reln's columns
            for column in inv.local_columns:
                for fk in column.foreign_keys:
                    if fk.column.table == parent_instance.__class__.__table__:
                        query = query.filter(
                            getattr(coll_alias, column.name) ==
                            parent_instance.id)
                        found_key = True
        if not found_key:
            query = query.filter(owner_alias.id == parent_instance.id)
        return query
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号