0

在我们的系统中,有与“用户”对象相关联的“汽车”对象。使用子查询,我想计算一组特定的 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, 0, 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)
4

1 回答 1

0

好的,找到了解决方案:您可以在上面的注释部分执行算术,如下所示:

.annotate(count=Count("car__user") * bonus + 100)
于 2021-03-30T17:33:58.953 回答