我有以下模型
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的值