gpt4 book ai didi

django - 关于 select_related() 缓存

转载 作者:行者123 更新时间:2023-12-01 13:59:13 26 4
gpt4 key购买 nike

我正在做一个 select_related() 查询集来防止不必要地命中数据库。在我的模型中,我有:

class Item(models.Model)
user = models.ForeignKey(User, related_name='items')
name = models.CharField(max_length=255)
region = models.ForeignKey(Region, null = True, blank = True) #django-cities
country = models.ForeignKey(Country, null = True, blank = True) #django-cities

def get_ubicacion_name(self):
if self.region:
return self.region
else:
return self.country

class Activity(models.Model)
date = models.DateField()
item = models.ForeignKey(Item, related_name='items')

在我看来:

ax = Activity.objects.select_related('item','item__region','item__country').all()[:40]

在我的模板中:

{% for a in ax %}
{{ a.date }} - {{ a.get_ubicacion_name }}
{% endfor %}

调试工具栏显示43 queries in 53.87ms因为正在打 self.country所以select_related('item','item_<em>region','item</em>_country')不适用于此定义?

在外壳中:

>>> ac = ax[0]
>>> dir(ac)
...... '_item_cache', .......
>>> dir(ac.item)
...... '_country_cache','_region_cache',.......

谢谢。

最佳答案

这应该有效。你可以在 shell 中试试吗?像在 View 中一样获取 ax 查询集,然后使用 dir 检查第一个成员:

>>> ac = ax[0]
>>> dir(ac)

您应该看到的属性之一是 _item_cache,这是 Django 缓存 ForeignKey 查找的方式。同样,如果您执行 dir(ac.item),您应该会看到 _region_cache_country_cache 的条目。如果没有,请在此处发布结果,希望我们可以进一步调试。

关于django - 关于 select_related() 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4817761/

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