OpenERP创建&一次写出方法

时间:2013-04-26 06:22:55

标签: python xml openerp

当我要创建记录时,这是我的错误。请告诉我哪里缺少点。?

  File "/home/bellvantage/Documents/openerp-7.0/openerp-7/openerp/addons/bpl/bpl.py", line 394, in create
    self.write(cr, uid, [id], {'name': name}, context)
  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 'builtin_function_or_method'
2013-04-26 06:14:07,719 5739 INFO demo werkzeug: 127.0.0.1 - - [26/Apr/2013 06:14:07] "POST /web/dataset/call_kw HTTP/1.1" 200 -

我的代码中的相关行是这样的

def create(self, cr, uid, values, context=None):
    name = 'CheckRoll No : ' + str(values['checkroll_no']) + ' & Gang No : ' + str(values['gang_no'])
    self.write(cr, uid, [id], {'name': name}, context)
    return True        

错误来了,表明我的写入方法不正确。看似我遗漏了一些参数。 需要你的建议来实现模块 感谢..

EDITED

现在出现如下错误

  File "/home/bellvantage/Documents/openerp-7.0/openerp-7/openerp/addons/bpl/bpl.py", line 395, in create
    res = super('bpl.work.offer',self).create(cr,uid,values,context=context)
TypeError: must be type, not str
2013-04-26 07:58:43,452 6947 INFO demo werkzeug: 127.0.0.1 - - [26/Apr/2013 07:58:43] "POST /web/dataset/call_kw HTTP/1.1" 200 -

这里显示我在模型类中的字段

'name': fields.char('Name', size=50),
'checkroll_no': fields.integer('Checkroll No'),
'gang_no': fields.integer('Gang'),

在调试时显示(在super.create()时间),

dict: {'selected_tea_workers_line_ids': [[5, False, False], [0, False, {'worker_emp_no': '1000', 'worker_id': 
 1, 'tea_line_worker_id': False, 'is_selected': False}]], 'user_id': False, 'is_confirmed': False, 
 'date_of_offer': '2013-04-26', 'bpl_division_id': 1, 'work_type': 'tea', 'checkroll_no': 10, 'name': 
 'CheckRoll No : 10 & Gang No : 100', 'selected_rubber_workers_line_ids': [[5, False, False], [0, False, 
 {'worker_emp_no': '1001', 'worker_id': 2, 'rubber_line_worker_id': False, 'is_selected': False}]], 
 'work_update_id': False, 'field_no': 15, 'selected_sundry_workers_line_ids': [], 'payment_type': 
 'normal_work', 'gang_no': 100, 'total_workers': 0, 'no_of_workers': 0, 'norm': 15, 
 'selected_other_workers_line_ids': [], 'bpl_estate_id': 1, 'select_by': 'by_name'}

现在它起作用了。谢谢AnomA

上次修改

def create(self, cr, uid, values, context=None):
    name = 'CheckRoll No = ' + str(values['checkroll_no']) + ' & Gang No = ' + str(values['gang_no'])
    values.update({'name': name})
    return super(bpl_work_offer,self).create(cr,uid,values,context=context) 

2 个答案:

答案 0 :(得分:3)

其实你做错了。您正在尝试写入未创建的记录。此外,我认为您不需要在这种情况下使用写入。

class bpl_abc(osv.osv)
    _inherit = 'bpl.work.offer'
    def create(self, cr, uid, values, context=None):
        name = 'CheckRoll No : ' + str(values['checkroll_no']) + ' & Gang No : ' + str(values['gang_no'])
        values.update({'name': name})
        res = super('bpl_abc',self).create(cr,uid,values,context=context)
        return res
bpl_abc()

请记住,openerp中的create function总是返回新创建记录的id。

答案 1 :(得分:-2)

可能是因为'write'方法是内置方法

EX:

with open("a.txt","r+") as f:
    f.write("sometext")

不要使用self.write,因为write是'file'对象

的内置方法