Сумма в запросе с F() возвращает None вместо нуля, если значение равно null
У меня такой запрос
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 или есть другой способ получить сумму?
В своем reduce
вы написали
F(col) for col in cols
Вы хотите
F(col) for col in cols if F(col)
(Или используйте ... if F(col) is not None
)
для сохранения нулей, например, если вы переходите
от сумм к средним.)