Skip to Content
Menu
This question has been flagged
2 Replies
1760 Views

Hi

How are you everybody?

I have this problem  thank you

ValueErrorExpected singleton: financial.grant(1, 3, 4)


Avatar
Discard
Best Answer

Hi Salama,

A singleton error means that the result that you get contains multiple values while your code expects one record to be returned.
You can solve this by looping over the records and doing your logic there. For example:

for grant in financial_grant:
    print('grant record: ' + str(grant.name))

Odoo is telling you that the result contains a recordset, so multiple records, while it expected one.
There can be a lot of reasons for this but usually it means that you're not looping over records while you should or that you're calling 'self' within a loop instead of the record.
You can find quite some reports with singleton errors where you might learn from. For example:

https://www.odoo.com/nl_NL/forum/help-1/question/expected-singleton-71132
https://www.odoo.com/nl_NL/forum/help-1/question/valueerror-expected-singleton-144675
https://www.odoo.com/nl_NL/forum/help-1/question/valueerror-expected-singleton-s-self-147617
https://www.odoo.com/nl_NL/forum/help-1/question/valueerror-expected-singleton-stock-picking-141910#answer-141916 

Regards, 
Yenthe

Avatar
Discard
Author Best Answer

@api.one
@api.depends('required_hours','completed_hours')#,'seniority_classamount_amount','seniority_pay','category_class_basic_grant','diplom_premium','performance_bonus','grade_premium','sem_owe_him')
def presence_avarage_count(self):
for r in self:
if r.required_hours > r.completed_hours :
r.presence_avarage = (float)(r.completed_hours / r.required_hours)
r.percentage_presence_avarage = r.presence_avarage * 100
else:
r.presence_avarage = -2



@api.one
@api.depends('presence_avarage','g_spy','g_indebtedness','g_bg','g_scm','g_pb','g_gp','g_dp')
for t in self:
if t.presence_avarage > 0:
t.g_final = (((t.g_spy * t.g_scm) + (2 * t.g_pb) + t.g_bg + t.g_gp + t.g_dp) * 3 * t.presence_avarage) + t.g_indebtedness
#t.a = t.g_spy * t.g_scm
#t.b = t.g_pb * 2
#t.c = t.a + t.g_bg + t.g_gp + t.g_dp + t.b
#t.d = 3 * t.c * t.presence_avarage
#t.g_final = t.d + t.g_indebtedness
else:
t.g_final = -3

Avatar
Discard