python - django 按日归档统计订单求解
PHP中文网
PHP中文网 2017-04-18 10:33:07
0
1
583

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

PHP中文网
PHP中文网

认证0级讲师

모든 응답(1)
刘奇

paid_in은 데이터베이스 필드가 아니며 분명히 SQL 문에서 사용할 수 없습니다. 두 가지 방법:

  1. 기간과 일치하는 주문 인스턴스를 꺼내어 시간별로 필터링합니다. 그런 다음 Sum(all order.pard_in)

  2. 데이터베이스 수준 기간과 일치하는 모든 주문의paid_card,paid_cash,paid_gift 합계

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿