gpt4 book ai didi

python - django select_related() 和 django-mptt。如何一次获取所有 sibling ?

转载 作者:行者123 更新时间:2023-12-04 15:22:44 26 4
gpt4 key购买 nike

我正在尝试获取当前页面的所有 sibling 。 Page模型看起来像这样:

class Page(MPTTModel):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, blank=True) # changing to CharField from SlugField
markdown = models.TextField()
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True,
blank=True, related_name='children')
获取所有 sublings 页面的代码如下所示:
pages = page.get_siblings(include_self=True)
问题是上面的代码会为每个页面访问数据库。因此,如果有 50 个,则会导致 50 个查询。
我尝试使用 select_related() 来解决问题但无济于事。这是我尝试过的。
pages = page.get_siblings(include_self=True).select_related()

# this too doesn't work
pages = page.get_siblings(include_self=True).select_related('parent')
在寻找解决方案时,我偶然发现了 this页。这表明 select_related()可以用 get_siblings() 调用.
我究竟做错了什么?

最佳答案

您是否尝试使用标准方式访问 Django 模型范式中的兄弟/父对象?
你可以在这里找到一个例子:

  • Django: how to query parent model based on a filter of a child model?
  • https://docs.djangoproject.com/fr/2.2/topics/db/queries/#lookups-that-span-relationships

  • 在您的特定情况下,代码段应如下所示: MPTTModel.objects.filter(page__pk=page.pk)

    关于python - django select_related() 和 django-mptt。如何一次获取所有 sibling ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62957327/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com