【问题标题】:How to use Django ORM to function on a field如何使用 Django ORM 在字段上运行
【发布时间】:2015-09-14 20:21:21
【问题描述】:

这个问题是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

【问题讨论】:

    标签: mysql django django-models orm


    【解决方案1】:

    不确定,但试试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

    【讨论】:

    • 当我执行 sum2=Sum(F('my_date')) 时,出现以下异常:gist.github.com/saqib-zmi/50bf572a972bae5d2871。我什至没有机会添加 +0。
    • hm 我已经在我的 django 1.8 项目 Product.objects.values('id').annotate(sum1=Sum(F('price') + 50)) 上进行了测试,它可以工作.. . 添加 date_created 与 default=datetime.datetime.now 它也可以工作
    • code.djangoproject.com/ticket/14030 这张票已于 7 个月前关闭...
    • 啊,好的。我使用的是 Django 1.7.1。我现在正在升级到 1.8.2,并将报告。
    猜你喜欢
    • 2021-12-01
    • 2012-10-17
    • 2020-11-22
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2018-06-19
    • 2015-09-20
    相关资源
    最近更新 更多