Django获得父母的所有子女和子女

时间:2017-08-21 12:02:26

标签: python django django-queryset

我有一个自我引用的模型,我希望在一个查询中获得所有孩子的孩子等等。 是否有任何查询集可以让所有孩子都与父母相关?

1 个答案:

答案 0 :(得分:0)

我之前在项目中做过类似的事情,除了我使用的是SQLAlachemy。你可以在模型上添加一个属性或类方法,它可以像我的方法那样:

除非您改变列表理解以使用Django关系查询(M2M,外键)。

由于您在使用下面的属性时已经拥有该对象,因此您可以在列表解析中对M2M关系查询执行类似的操作:

[c.serialize for c in self.related_column.all()]

    @property
    def serialize(self):
        """ Returns a json serializable dict.

        Notes:
            What's cool about this is that the children's key recursively keeps
            calling itself on all of the children of each new node. Causing the
            output to look like which is pretty powerful.

            - Root
                - level_1  
                    - level_2
                        - level_3
                - level_1  
                    - level_2
                        - level_3
                - level_1  
                    - level_2
                        - level_3

        Returns:
            dict: Key value pairs of essential Node data.
        """
        base = {
            'id':                self.id,
            'name':              self.name,
            'min_num':           self.min_num,
            'max_num':           self.max_num,
            'parent_id':         self.parent_id,
            'can_have_children': self.can_have_children

        }
        if self.can_have_children:
            return {**base, 'children': [c.serialize for c in self.sub_nodes]}
        else:
            return base