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

时间:2018-07-20 06:20:47

标签: django django-orm

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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