python - django 按日归档统计订单求解

 U友47919166 发布于 2022-10-25 08:11

models.py:订单数据模型

class Order(models.Model):
    date = models.DateTimeField(default=timezone.now)
    paid_card = models.PositiveIntegerField(blank=True, null=True)
    paid_cash = models.PositiveIntegerField(blank=True, null=True)
    paid_gift = models.PositiveIntegerField(blank=True, null=True)
    
    statur = models.CharField()

    @property
    # 实收金额(paid_in) = paid_card + paid_cash + paid_gift
    def paid_in(self):
        return sum(filter(None, [self.paid_card, self.paid_cash, self.paid_gift]))

views.py: 按日归档统计每天的订单数、订单总额

def wx_archive(request):
    orders = Order.objects.filter(status='closed')\
        .annotate(day=TruncDay('start_time')).values('day')\
        .annotate(count=Count('id'), total=Sum('paid_in')).values('day', 'count', 'total')\
        .order_by('day')
    return render(request, 'orders/archive.html', {'orders': orders})

运行后报错,提示

FieldError at /orders/archive/
Cannot resolve keyword 'paid_in' into field. Choices are: count, day, id, paid_card, paid_cash, paid_gift, status

请问,我该如何统计每日的总 paid_in

1 个回答
  • 你的paid_in并不是数据库字段,很明显不能用在SQL语句中。两个方法:

    1. 把符合时间段的orders实例取出来,用时间筛选。然后Sum(所有的order.pard_in)

    2. 数据库层面Sum所有符合时间段的订单的paid_card, paid_cash, paid_gift

    2022-10-26 14:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有