Django:基于带条件的注释进行注释

Django: Annotate based on annotations with conditional

我在我的查询集注释链的末尾执行此操作:

.annotate(diff=F("total_views")/F("previous_views")

问题是 total_viewsprevious_views 本身都是注释。这是有效的,除非 F("previous_views") 等于 0。然后我得到除以零的错误。所有使用 Case/When 的尝试都失败了。

我正在寻找一种方法来计算 diff 作为分数,除非 previous_views0,在这种情况下 diff 应该是 None.

显然,可以将注释用作 When 子句中的常规字段:

.annotate(
                diff=Case(
                    When(previous_views__gt=0, then= F("total_views") - F("previous_views"))
                , default=None, output_field=FloatField())
            )