使用多对多字段防止双重查询

时间:2014-09-25 03:12:54

标签: python django

在我的模型中,我得到了这个:

Model(models.Model):
  prices = models.ManyToManyField('Price')

  def foo(self):
    obj_prices = self.prices.all() # I expect save all prices in 'obj_prices'

    fist_price = obj_prices[0]     # I need the first price

    for obj_price in obj_prices:   # Also I need to check each price
      // Do something

正如我评论的那样,我希望将所有价格保存在' obj_prices'防止多次查询。但我用Debug Toolbar检查了这个,我得到了这个:

SELECT ••• FROM `app_model` ASC LIMIT 1

SELECT ••• FROM `app_model` ASC

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

QuerySets是惰性的,只在需要时执行。它试图通过在第一个查询中仅执行LIMIT 1来帮助您。

如果你要反复遍历查询集,强制它执行:

obj_prices = list(self.prices.all())