跳至内容
菜单
此问题已终结
3 回复
21780 查看

A onchange method that try to modify the inherited domain and presents me the following error, this is the code I'm using and the new api..

File "/usr/lib/python2.7/dist-packages/psycopg2/extensions.py", line 129, in getquoted 

pobjs = [adapt(o) for o in self._seq]

ProgrammingError: can't adapt type 'account.journal'

@api.multi
def onchange_company_id(self, company_id, part_id, type, invoice_line, currency_id):
        result = super(account_invoice, self).onchange_company_id(company_id, part_id, type, invoice_line, currency_id)

        obj_jrnl = self.env['account.journal']
        jrnl_ids = result['domain']['journal_id']
        jrd = []

        for jrnl_id in jrnl_ids:
            for lst in jrnl_id[2]:
                jrnl = obj_jrnl.search([('id','=',lst)])
                for rec_jrnl in obj_jrnl.browse(jrnl):
                    if type in ('out_invoice', 'in_invoice'):
                        if rec_jrnl.type_doc.main_doc:                  # <-- Line Error
                            jrd.append(lst)
                    else:
                        if not rec_jrnl.cat_doc.void:             
                            jrd.append(lst)
            if jrd:
                result['value'] = {'journal_id': jrd[0]}
                result['domain'] = {'journal_id':  [('id', 'in', jrd)]}
                
        return result

The field is many2one type_doc to another table and main_doc is a boolean field, this method works flawlessly in 6.1 and 7.0

形象
丢弃
最佳答案

Don't pass values to created like this, instead pass the id
'journal_id': self.journal_id,

Like this

'journal_id': self.journal_id.id,


形象
丢弃
最佳答案

One line above your error you mention "type" but you do not specify what it is. 

Normally this error shows up when you want to for example browse over a record but the id is a boolean (false) instead of an integer.

Also make sure that type_doc is always provided (mandatory) because in your code you automatically assume that it is!

形象
丢弃
编写者

thanks ludo the problem was Logic, rewrote the code and ready

编写者 最佳答案

The problem was logic, the correct code is this:

        for jrnl_id in jrnl_ids[0][2]:
            rec_jrnl = obj_jrnl.browse(jrnl_id)
            if type in ('out_invoice', 'in_invoice'):
                if rec_jrnl.type_doc.main_doc:
                    jrd.append(jrnl_id)
                else:
                    if not rec_jrnl.cat_doc.void:
                       jrd.append(jrnl_id)
            if jrd:
                result['value'] = {'journal_id': jrd[0]}
                result['domain'] = {'journal_id':  [('id', 'in', jrd)]}
                
        return result

 

形象
丢弃
相关帖文 回复 查看 活动
2
5月 23
13071
0
5月 23
37
1
4月 23
6564
1
9月 21
4484
2
1月 20
14944