模型保存后计算对象字段的最大值

时间:2016-09-10 06:23:10

标签: django django-models django-views

在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变量。这该怎么做?

1 个答案:

答案 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查询时间并提高性能。