【发布时间】:2017-04-12 12:13:54
【问题描述】:
在我的应用程序的一个页面中,我试图显示每家公司最昂贵的汽车。我的模型大致如下:
class Company(models.Model):
id = models.IntegerField(primary_key=True)
company = models.CharField(max_length=100)
headcount = models.IntegerField(null=False)
info = models.CharField(max_length=100)
class Car(models.Model):
id = models.IntegerField(primary_key=True)
company_unique = models.ForeignKey(Company)
company = models.CharField(max_length=50)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=9, decimal_places=2, default=0.00)
所以,我想建立一个包含每家公司最昂贵的汽车对象的列表。
我是这样处理问题的:
company_list = Company.objects.all()
most_expensive = []
for company in company_list:
most_expensive.append(Car.objects.filter(company_unique=company.id).order_by("-price")[0])
但是,这似乎是一种非常低效的方法。我可以通过 Django 调试工具栏看到这段代码产生了太多的 mysql 查询。
有人可以提出一个更好的方法来构建这个可能只影响 MySQL 一次或两次的列表吗?
【问题讨论】:
-
使用这些内置函数可能会减少您的查询计数:docs.djangoproject.com/en/1.10/topics/db/optimization/…
标签: python mysql django django-queryset django-orm