首页 > 解决方案 > Django:基于带条件的注释进行注释

问题描述

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

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

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

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

标签: djangodjango-orm

解决方案


When显然,可以像使用子句中的常规字段一样使用注释:

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

推荐阅读