gpt4 book ai didi

django-taggit:有没有办法产生更少的数据库查询?

转载 作者:行者123 更新时间:2023-12-02 09:54:32 26 4
gpt4 key购买 nike

假设我有一个模型:

class Entry(models.Model):
...
tags = TaggableManager()

当我在模板中迭代 Entry.objects.all() 时,entry.tags.all 会再生成一个对数据库的查询。是否可以减少查询次数?使用像 select_lated() 这样的东西(我知道它不会工作,因为 django-taggit 使用多关系,但我确信应该有一种方法可以在 1 个命中中选择具有相关标签的所有条目)?

最佳答案

从 Django 1.4 开始,您可以使用 prefetch_lated 在单个查询中检索查询集上的一对多关系。不幸的是,这对于 django-taggit 来说效果不佳,因为 'tags' 属性是一个管理器而不是真正的关系,因此 prefetch_lated 无法理解它。相反,您需要遵循 tagged_items 关系:

entries = Entry.objects.prefetch_lated('tagged_items__tag')

然后,您需要在模板代码中进行一些类似的修改才能访问预取的标记,因为 entry.tags.all 将运行另一个查询而不是使用预取:

{% for tagged_item in entry.tagged_items %}
<li>{{ tagged_item.tag.name }}</li>
{% endfor %}

关于django-taggit:有没有办法产生更少的数据库查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547273/

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