如果值为null,则使用F()的查询中的求和将返回None而不是零



我有这个查询

sq_edit = UsulanRekomposisiData.objects.filter(file=draft, prk=OuterRef('prk'))
cols = ['edit_jan', 'edit_feb', 'edit_mar', 'edit_apr', 'edit_mei', 'edit_jun', 'edit_jul', 'edit_aug', 'edit_sep', 'edit_okt', 'edit_nov', 'edit_des']
expr = reduce(add, (F(col) for col in cols))
lrpa = monitoring. 
annotate(
edit_jan = sq_edit.values('jan'),edit_feb = sq_edit.values('feb'),edit_mar = sq_edit.values('mar'),edit_apr = sq_edit.values('apr'),
edit_mei = sq_edit.values('mei'),edit_jun = sq_edit.values('jun'),edit_jul = sq_edit.values('jul'),edit_aug = sq_edit.values('aug'),
edit_sep = sq_edit.values('sep'),edit_okt = sq_edit.values('okt'),edit_nov = sq_edit.values('nov'),edit_des = sq_edit.values('des')
).annotate(sum_edit = expr)

我想注释每个月的编辑总数,但它总是返回None,因为其中一个月的值为null。如果值为None,则F返回0,或者有其他方法可以获得总和吗?

编辑:F(col) for col in cols的结果将是edit_jan到edit_des的值,这是示例结果:

使用0 if F(col) is None else F(col) for col in colsF(col) for col in cols if F(col) is not None产生相同的结果

for data in lrpa:
print(data.prk.no_prk, data.sum_edit, data.edit_jan, data.edit_okt)
#RESULT
2019.USLS.36.002 None None 112
2019.USLS.64.001 None None 123
2019.USLU.1.002 None None None
2021.USLW.202.003 None None None
2022.USLW.291.001 None None None
2019.USLS.63.001 None None None
2019.USLU.12.002 None None None
2019.USLU.13.002 None None None
2020.USLS.148.003 None None None
2021.USLU.24.013 None None None
2021.USLW.15.006 None None None
2021.USLW.208.003 None None None
2022.USLW.152.001 None None None
2022.USLW.296.001 None None None

在您的reduce中,您编写了

F(col)  for col in cols

你想要

F(col)  for col in cols  if F(col)

(或使用... if F(col) is not None保留零,例如,如果移动从总和到平均值。(

最新更新