该问题是对this one的跟进。

我正在MySQL(实际上是MariaDB)数据库之上运行Django应用程序。

我的Django模型如下所示:

from django.db import models
from django.db.models import Count, Sum

class myModel(models.Model):
    my_string = models.CharField(max_length=32,)
    my_date = models.DateTimeField()

    @staticmethod
    def get_stats():
        logger.info(myModel.objects.values('my_string').annotate(
                count=Count("my_string"),
                sum1=Sum('my_date'),
                sum2=Sum(# WHAT GOES HERE?? #),
            )
        )


当我呼叫get_stats时,它会给我计数和sum1。
但是,对于sum2,我希望每个匹配行的以下数据库表达式的总和:my_date + 0(将其转换为真实的整数值)。

为了在sum2中返回该总和,我应该在上面的表达式中添加什么?

将其更改为sum2=Sum(F('my_date'))时,出现以下异常:http://gist.github.com/saqib-zmi/50bf572a972bae5d2871

最佳答案

不确定,但是尝试F() expression

from datetime import timedelta

myModel.objects.annotate(
    count=Count("my_string"),
    sum1=Sum('my_date'),
    sum2=Sum(F('my_date') + timedelta(days=1))
).values('my_string', 'count', 'sum1', 'sum2')


https://docs.djangoproject.com/en/dev/ref/models/queries/#f-expressions

09-17 16:44