在模板中请求相关对象时,呈现页面的速度非常慢。
class Item(models.Model):
name = models.CharField(max_length=160)
...
class Box(models.Model):
...
items = models.ForeignKey(Item, on_delete=models.CASCADE, null=True)
#template
{% for item in items %}
{{ item.box_set.first }}
{{ item.box_set.latest }}
{% endfor %}
调试工具栏显示了很多重复的查询。 为什么会这样呢?有没有办法加快速度?
答案 0 :(得分:1)
除非已被缓存,否则Django ORM在访问相关字段时必须向数据库发出请求。缓存相关对象的主要方法是通过select_related
和prefetch_related
。
您要尝试做的事情有些困难;您正在尝试从集合中获取两个特定项目。您可以使用.annotate()
和Subquery
从相关模型中提取单个字段。如果您只想显示Box中的单个字段,这将很有用,但是如果您需要整个Box实例,则将无法使用。