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

Python 防止使用多对多字段进行双重查询,python,django,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_pri

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

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
SELECT ••• FROM `app_model` ASC LIMIT 1

SELECT ••• FROM `app_model` ASC
正如我所评论的,我希望将所有价格保存在“obj_prices”中,以防止多次查询。但我用调试工具栏检查了一下,得到了:

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
SELECT ••• FROM `app_model` ASC LIMIT 1

SELECT ••• FROM `app_model` ASC

有什么想法吗?谢谢。

查询集很懒惰,只在需要时执行。它试图通过在第一个查询中只执行限制1来帮你一个忙

如果要以任何方式迭代queryset,请强制执行:

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