Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django/Postgres中存储树结构_Python_Django_Postgresql_Tree_Hierarchy - Fatal编程技术网

Python 在Django/Postgres中存储树结构

Python 在Django/Postgres中存储树结构,python,django,postgresql,tree,hierarchy,Python,Django,Postgresql,Tree,Hierarchy,我目前有这些模型,为了回答这个问题而简化: class Profile(models.Model): user = models.OneToOneField(User) class Post(models.Model): creator = models.ForeignKey(User) profile = models.ForeignKey(Profile) # the model in question class Repost(models.Model):

我目前有这些模型,为了回答这个问题而简化:

class Profile(models.Model):
    user = models.OneToOneField(User)

class Post(models.Model):
    creator = models.ForeignKey(User)
    profile = models.ForeignKey(Profile)

# the model in question
class Repost(models.Model):
    creator = models.ForeignKey(User)
    post = models.ForeignKey(Post)
    profile = models.ForeignKey(Profile)
    parent = models.ForeignKey("self", related_name="children")
这可以通过使用Profile对象来获取Repost/Post(虽然效率有点低),但我不能遍历整个树,因为这将有太多的查询

所以我一直在阅读这个主题,似乎闭包表()非常适合我的用例:

  • 获取特定配置文件id的发布/重新发布
  • 获取某个帖子id的整个Reposts树
  • 问题在于,我发现的大多数示例(包括本库的文档和其他讨论闭包表的文章)主要展示了如何通过根Repost id检索树(这打破了我的第二个用例,因为我只有Post id)

    PS:说到数据库,我是一个彻头彻尾的noob,所以整个事情可能是一团糟,我愿意接受更好的想法/架构


    谢谢。

    你到底想要实现什么?像reddit这样的东西?请带上你的树的一些例子,这不是一个简单的
    Repost.objects.filter(post=my_post)
    在你的第二个案例中,还是我遗漏了什么?是的,是一个链接共享平台,但当然没有reddit那么大。我这样做主要是为了学习(而不是完全抛弃博士后,比如使用neo4j),你有没有看过《django mptt》?@RedJohn没有,我只是想知道。我以前从未使用orm处理过树形结构,所以我有点大胆地思考。你到底想实现什么?像reddit这样的东西?请带上你的树的一些例子,这不是一个简单的
    Repost.objects.filter(post=my_post)
    在你的第二个案例中,还是我遗漏了什么?是的,是一个链接共享平台,但当然没有reddit那么大。我这样做主要是为了学习(而不是完全抛弃博士后,比如使用neo4j),你有没有看过《django mptt》?@RedJohn没有,我只是想知道。我以前从未使用orm处理过树结构,所以我有点大胆地思考。