【问题标题】:Reduce the number of Django database calls for a ForeignKey?减少对 ForeignKey 的 Django 数据库调用次数?
【发布时间】:2013-06-13 15:02:52
【问题描述】:

我对一些带有 ForeignKey 的 Django 模型进行了查询,我注意到这意味着有多个数据库调用,这可能不是必需的。

这是我的模型:

class Store(models.Model):
    name = models.CharField(max_length=100) 
class Computer(models.Model):
  model = models.CharField(max_length=500)
  store = models.ForeignKey(Store)

我的看法:

results = Computer.objects.filter(model=model)

这是我的模板:

{% for result in results %}
<li class="result">
{{ result.name }} from {{ result.store.name }}
</li>
{% endfor %}

使用django-debug-toolbar 我可以看到有一个数据库调用来获取结果:SELECT ••• FROM "mydb_computer"/,正如我所期望的那样。

但是还有更多的数据库调用(每个结果一个)来获取商店名称:SELECT ••• FROM "mydb_store" WHERE "computer_store"."id" = 27 等。

有什么方法可以让商店名称成为商品的属性,以避免这些多次数据库调用?

【问题讨论】:

    标签: django django-models django-database


    【解决方案1】:

    select_related 应该做你想做的事:

    results = Computer.objects.filter(model=model).select_related('store')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 2011-10-04
      • 2013-02-12
      • 2012-08-22
      • 2014-07-12
      • 2011-09-24
      • 2011-06-04
      相关资源
      最近更新 更多