python - 在 django 模型中加载树结构时出现问题

标签 python django django-models

我有 2 个这样的 django 模型

class Thread(models.Model):

    title = models.CharField(max_length=255, blank=True)

class Post(models.Model):

    message = models.TextField(blank=True)
    thread = models.ForeignKey(Thread, related_name='posts')
    depth = models.PositiveIntegerField(default=0)
    reply_to = models.ForeignKey('self', null=True, related_name='replies',
            blank=True)

我注意到当我这样做时

roots = Thread.posts.filter(depth=0)
for post in roots:
   replies = post.replies

django 执行查询来获取所有根,然后执行新查询来获取特定帖子的子项,我知道我将处理特定线程中的所有帖子。

我想知道是否有一种方法可以让 django 通过一个查询加载所有帖子,并且我还可以使用模型的关系递归地获取所有子项。

最佳答案

它不是 django 内置的,但您可以使用 Treebeard 或 django-mptt 等应用程序来实现此目的。

https://tabo.pe/projects/django-treebeard/

https://github.com/django-mptt/django-mptt

关于python - 在 django 模型中加载树结构时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18444504/

相关文章:

python-3.x - Django 上的 MakeMigration 错误 - ImportError : cannot import name 'FieldDoesNotExist' from 'django.db.models'

Django 多个左连接

python - 为什么 'django.contrib.admin.sites' 没有属性 'register' ?

python - 如何同时在模式和无模式模式下使用Django HStore DictionaryField?

python - 在 PANDAS 中添加带有计数的行

python - 从字符串中提取数字并替换?

django - 如何向 Django 模型添加额外数据以在模板中显示?

sql - 使用 `delete()` 时如何防止 django 在内存中加载对象?

python - Python 3-计算器错误处理

python - 在 Pandas 中转置几列(不是整个数据框)(与 get_dummies 相反)