0

我发现每次为模型加载管理页面时,MySQL 数据库都会变得无响应。我调查并发现查询Model.objects.all()运行了无数次,我认为有一些问题是因为 django 缓存不起作用,但我通过在 django shell 上运行查询验证了缓存部分。我仍然迷路,我有类似的代码对此:

class Car(models.Model):
    name = models.CharField(max_length=150, db_index=true)

class Accessories(models.Model):
    name = models.CharField(max_length=120, db_index=true)
    cars = models.ManyToManyField(Car)

它非常简单,我仍然无法理解发生了什么?

4

1 回答 1

1

我猜你已经重写__str__了方法来打印所有相关的模型对象self.cars.all(),在这种情况下,你需要像这样使用 prefetch_reload 机制:

Accessories.objects.all().prefetch_related('cars')

这将减少工作量,因为它将从预先填充的查询集中预取给定配件的汽车,而不是每次都去 MySQL 数据库。

于 2014-09-01T17:58:18.183 回答