属性错误:'float'对象没有'get'属性。

3

这是我的错误信息

2013-03-13 10:31:50,358 11345 ERROR OpenERP_DB openerp.osv.osv: Uncaught exception
Traceback (most recent call last):
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 131, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 197, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 185, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py", line 4479, in create
    self.pool.get(object)._store_set_values(cr, user, ids, fields2, context)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py", line 4627, in _store_set_values
    result = self._columns[f].get(cr, self, ids, f, SUPERUSER_ID, context=context)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/fields.py", line 1137, in get
    elif result.get(id):
AttributeError: 'float' object has no attribute 'get'
2013-03-13 10:31:50,363 11345 ERROR OpenERP_DB openerp.netsvc: 'float' object has no attribute 'get'
Traceback (most recent call last):
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/netsvc.py", line 293, in dispatch_rpc
    result = ExportService.getService(service_name).dispatch(method, params)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/service/web_services.py", line 618, in dispatch
    res = fn(db, uid, *params)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 188, in execute_kw
    return self.execute(db, uid, obj, method, *args, **kw or {})
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 131, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 197, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 185, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py", line 4479, in create
    self.pool.get(object)._store_set_values(cr, user, ids, fields2, context)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py", line 4627, in _store_set_values
    result = self._columns[f].get(cr, self, ids, f, SUPERUSER_ID, context=context)
  File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/fields.py", line 1137, in get
    elif result.get(id):
AttributeError: 'float' object has no attribute 'get'
2013-03-13 10:31:50,369 11345 INFO OpenERP_DB werkzeug: 127.0.0.1 - - [13/Mar/2013 10:31:50] "POST /web/dataset/call_kw HTTP/1.1" 200 -

这是我的模块源代码:

class namelistupdate(osv.osv):

    def _invoiced_rate(self, cr, uid, ids, name, args, context):
        amount_untaxed = 1
        if amount_untaxed == 0:
            res = 100.0
        else:
            res = 50.0
        print (res)
        return res

    _name = "checkroll.namelist.update"
    _description = "This table is for keeping Name list updates"
    _columns = {        
        'date': fields.date("Date"),
        'value': fields.function(_invoiced_rate, method=True, type='float', string='Test', store=True),
    }

namelistupdate()

我已经在后端表格中检查过了,它们被正确地创建并且字段也被正确地操作了。请检查一下这个问题,并告诉我问题所在。

这里展示了我的view.xml文件

    <record model="ir.ui.view" id="namelist_update_form">
        <field name="name">Name List Update</field>
        <field name="model">checkroll.namelist.update</field>
        <field name="type">form</field>
        <field name="arch" type="xml">
            <form string="namelist_update">
                <field name="date" />
                <field name="value" />
            </form>
        </field>
    </record>

    <record model="ir.ui.view" id="namelist_update_list">
        <field name="name">Name List Update</field>
        <field name="model">checkroll.namelist.update</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="namelist_update">
                <field name="value" />
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_namelist_update">
        <field name="name">Name List Update</field>
        <field name="res_model">checkroll.namelist.update</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

1
错误已经很清楚了,你必须在执行 result.get(id) 之前将一个浮点值分配给 result。另外,你能展示一下产生错误的代码吗? - avasal
@avasal:我认为这就是问题所在;因为它在OpenERP包内部,所以这可能是该平台的一个错误。 OP代码中没有任何迹象表明原因。 - Martijn Pieters
2
我注意到 _invoiced_rate 返回了一个浮点值。也许预期它应该返回一个映射? - Martijn Pieters
感谢您尽早回复。我在这里定义了一个变量res,与其他部分无关。编写这段代码是因为我想了解如何检查函数字段的工作原理。谢谢! - Priyan Changd
2个回答

2

1
def _invoiced_rate(self, cr, uid, ids, name, args, context):
    amount_untaxed = 1
    record_id=ids[0]
    res={record_id: 0.0}
    if amount_untaxed == 0:
        res[record_id] = 100.0
    else:
        res[record_id] = 50.0
    print (res)
    return res

我需要以字典对象的形式返回结果,键应为该记录的id。只需替换我的函数。

感谢http://help.openerp.com论坛上的Parth Gajjar先生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接