class Price(models.model):
value = models.DecimalField(...)
stock = models.ForeignKey("Stock", related_name='prices')
class Stock(models.model):
current_evlauation = models.ForeignKey('Price')
last_hour_evlauation = models.ForeignKey('Price')
在以mysql为数据库的django 1.11.13中,我想优化以下代码行:
last_hour = datetime.datetime.now() - datetime.timedelta(hours=2)
stock_list = Stock.objects.all()
for stock in stock_list:
stock.last_hour_evaluation = stock.prices.filter(date__gte=last_hour).earliest('date')
stock.current_evaluation = stock.prices.latest('date')
stock.save()
stock_deltas = list(Stock.objects.annotate(delta=F('current_evaluation__value)-F('last_hour_evaluation__value')).values_list('delta', flat=True))
例如:
stock_deltas = list(Stock.objects\
.annotate(current_eval=..., last_eval=...)\
.annotate(delta=F('current_eval') -F('last_hour_eval'))\
.values_list('delta', flat=True))
(股票δ=最近一小时内股票价格变化列表)
有可能做这种事吗?否则,如何使用最少的查询来编写第一段代码?
1条答案
按热度按时间khbbv19g1#
你可以合并
Max
以及Min
与Q objects
用于复杂过滤