对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, 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)

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

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

最新更新