在views.py中我有这个
class CarListView(ListView):
model = Car
def get_context_data(self, **kwargs):
context = super(CarListView, self).get_context_data(**kwargs)
context['max_price'] = Car.objects.all().aggregate(Max('price'))
return context
每次用户请求页面时都会调用聚合方法。这将增加页面加载的延迟。我希望每次管理员保存新的Car对象时都会计算这个max_price变量。这该怎么做?
答案 0 :(得分:3)
Django的性能非常重要。如果您希望在ListView中实现该要求,请转到
Car.objects.all().only('price').aggregate(Max('price'))
sql查询将是
SELECT MAX("table_car"."price") AS "price__max" FROM "table__car"
这里e没有获取所有表数据,因此性能比获取所有数据要好得多。
您可以使用
Car.objects.all().values('price').aggregate(Max('price'))
也
如果您想在管理员保存数据时获取数据,您可以执行此操作,
Car.objects.all().values('price').order_by('-price')[0]
这会根据值对汽车数据进行排序,并仅提取一个条目
SQL查询:
SELECT "car"."price" FROM "car" ORDER BY "car__price"."price" DESC LIMIT 1
这些将减少SQL查询时间并提高性能。