콘텐츠로 건너뛰기
메뉴
커뮤니티에 참여하려면 회원 가입을 하시기 바랍니다.
신고된 질문입니다
1 회신
6812 화면

Hello,

Suppose I have two Float fields and a date field:

num = fields.Float('Number')
sum_num = fields.Float('Sum all values of the num field')

time_num = fields.Date('Time')

I created the first record and put value: 1.0 in the num field;
num = 1.0
and selected time_num field is :01/01/21 for Ex

and want the result in the sum_num field is 1.0
sum_num = 1.0

Then I created the second record and put value: 2.0 in the num field ;
num = 2.0

and selected time_num field is :01/02/21

and want the result in the sum_num field is 3.0 ;
sum_num = 3.0

And when I create the third record and put value: 3.0 in the num field:
num = 3.0

But I selected for time_num field is : 02/01/21

Then I want the result is : 3.0
sum_num : 3

and so on...

I'd tried to used compute field like this:

sum_num = fields.Float(compute='_sum_num', string='Sum all values of all records of sum field')

@api.depends('num')
def _sum_num(self):
     rec_sum = sum(self.search([]).mapped('num')
     for rec in self:
          rec.sum_num = rec_sum

The compute method working fine but I don't know how to execute it based on the selected month!

Please help!
Thank you!

아바타
취소
베스트 답변

Hey khanhqn,

May be you can use below compute function instead of your function, it will help you to found record match with based on the selected month.

import calendar

@api.depends('num')
def _sum_num(self):
for rec in self:
last_day = calendar.monthrange(rec.time_num.year, rec.time_num.month)[1]
rec_start = rec.time_num.replace(day=1)
rec_end = rec.time_num.replace(day=last_day)
rec_sum = sum(self.filtered(
lambda x: rec_start < x.time_num and rec_end > x.time_num).mapped('num'))
rec.sum_num = rec_sum

Thanks & Regards,

Email: odoo@aktivsoftware.com

Skype: kalpeshmaheshwari

아바타
취소
작성자

Yes, I got it. Thank you Jainesh !

관련 게시물 답글 화면 활동
2
9월 24
2422
0
11월 21
3841
Add sum in Group By 해결 완료
3
10월 21
15595
1
2월 21
3724
1
7월 25
2517