Django:通过两个字段(一个无效)订购



我有以下模型

class Model1(models.Model):
    parent = models.ForeignKey("self", models.SET_NULL, null=True, blank=True)

样本数据:

[{'id': 1}, {'id': 2, 'parent': 1}, {'id': 3, 'parent': 1}, {'id': 4}, {'id': 5, 'parent': 1}, {'id': 6, 'parent': 3}, {'id': 7, 'parent': 4}, {'id': 8, 'parent': 3}, {'id': 9, 'parent': 1}]

我想使用django orm订购每个父节点,示例数据的预期输出将是这样的:

1, 2, 3, 6, 8, 5, 4, 7, 9

对于每个父母,向孩子们展示他们的孩子。关于如何完成的任何想法?

我在想,也许有一些汇总的字段并通过它进行排序,但是我有点陷入困境。

感谢Risadinha的评论,终于做了以下内容:

覆盖我的模型保存方法来存储Matherialized_path

    def save(self, force_insert=False, force_update=False, using=None,
        update_fields=None):
        super(Position, self).save(force_insert=force_insert, force_update=force_update, using=using,
                               update_fields=update_fields)
        self.materialized_path = self.get_materialized_path()
        return super(Position, self).save(force_insert=force_insert, force_update=force_update, using=using,
                                      update_fields=update_fields)
    def get_materialized_path(self):
        parent = self.parent
        materialized_path = [str(self.id)]
        while (parent is not None) and parent.id != self.id:
            materialized_path.insert(0, str(parent.id))
            parent = parent.parent
        return '.'.join(materialized_path)

然后,使用生成的字段到order_by的值

相关内容

  • 没有找到相关文章

最新更新