Django注释过滤外键的最小值和最大值

2024-09-19 23:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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中,我想优化以下几行代码:

^{pr2}$

比如说:

stock_deltas = list(Stock.objects\
                         .annotate(current_eval=..., last_eval=...)\
                         .annotate(delta=F('current_eval') -F('last_hour_eval'))\
                         .values_list('delta', flat=True))

(stock_deltas=过去一小时内股票价格变动列表)

有可能做这种事吗? 否则,如何使用最少的查询来编写第一段代码?在


Tags: 代码modeldeltasmodelsstockevalcurrentprice
1条回答
网友
1楼 · 发布于 2024-09-19 23:32:26

您可以将MaxMin与{a1}结合起来进行复杂过滤

Stock.objects.all().annotate(
    current_eval=Min('prices__date', filter=Q(prices__date__gte=last_hour)),
    last_eval=Max('prices__date')).annotate(
    delta=F('current_val') - F('last_eval'))

相关问题 更多 >