Skip ke Konten
Menu
Pertanyaan ini telah diberikan tanda
2 Replies
6400 Tampilan

I've overridden the create method for my custom module to create only records that have certain data in vals dict. I did this because the model is being filled by a service over xml-rpc calls, so I don't want to create a record if a user does not exist in odoo.

So I first check if the key is even in vals dict and if it is I check if it's in Odoo else I return False (tried None same error). The error is caused by the models.py original create method because of the decorator @api.returns('self', lambda value: value.id). So every time that I want to return false I get an AttributeError: 'bool' object has no attribute 'id' in my log.

Is there a way to return False/None without raising an AttributeError? I can't make this check in the script that's executed by the service, because every xml-rpc call/response takes ~ 1s and I need to do 3-5 and this would take to long. 


@api.model
def create(self, vals):
if 'from_number' not in vals or 'to_number' not in vals:
_logger.error(u'TABLA: from or to number not in vals! Exiting! vals: {}'.format(vals))
return False

if vals['from_number'] != '':
caller_partner_id = self.get_partner_by_number(vals['from_number'])
if caller_partner_id:
vals['caller_partner_id'] = caller_partner_id
else:
_logger.error(u'TABLA: from number not in vals! Exiting! vals: {}'.format(vals))
return False

# some more checks, same style

call = super(TablaAsteriskCalls, self).create(vals)

# some more code if the record is created

return call


   

Avatar
Buang
Penulis Jawaban Terbai

It's just a simple fix... just had to override the lamdba in the decorator.

@api.returns('self', lambda value: value.id if value else False)
Avatar
Buang
Jawaban Terbai

Hello,

Instead of returning False/None just return empty record, as following :

return self.browse()
Avatar
Buang
Penulis

yep... you answer works to.

Post Terkait Replies Tampilan Aktivitas
1
Nov 17
3644
1
Mei 19
5393
1
Mar 18
11183
3
Mei 17
11041
1
Des 19
3658