我有这个查询
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 cols
或F(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
保留零,例如,如果移动从总和到平均值。(