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

Вернуться на верх