Сумма в запросе с 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)
для сохранения нулей, например, если вы переходите
от сумм к средним.)