对 Django 子查询值执行算术运算

问题描述

在我们的系统中,有与“用户”对象相关联的“汽车”对象。使用子查询,我想计算一组特定的 Car 对象,对结果执行算术运算并使用该值更新 User 对象。问题是子查询是表达式,而不是整数,因此我无法将它们作为整数处理。下面的代码不起作用,但您可以看到我想要实现的目标。这应该怎么做?

def get_car_data():
    since = timezone.Now() - timedelta(days=3)
    car_count = Subquery(
        Car.objects.filter(
            car__user=OuterRef("user"),car__user__blocked=False,created__gte=since,)
        .values("car__user")
        .annotate(count=Count("car__user"))
        .order_by()
        .values("count")
    )

    return {
        "car_count": Coalesce(car_count,output_field=IntegerField())
    }

def calculate_values(bonus):
    data = get_car_data()

    # THIS DOES NOT WORK
    User.objects.update(car_bonus_counter=data["car_count"] * bonus + 100)

解决方法

好的,找到解决办法了:你可以执行上面注释部分的算术,像这样:

.annotate(count=Count("car__user") * bonus + 100)