Error handling 禁止从非瞬态模型到瞬态模型的多种关系

Error handling 禁止从非瞬态模型到瞬态模型的多种关系,error-handling,openerp,Error Handling,Openerp,我试图在创建我的文件室时提供产品的库存数量(作为产品),因此使用stock.change.quantity.qty using\u inherits来存储使用的数量 我的代码: class hotel_room(osv.osv): _name = 'hotel.room' _inherits = { 'product.product':'product_id', 'stock.change.product.qty

我试图在创建我的文件室时提供产品的库存数量(作为产品),因此使用stock.change.quantity.qty using\u inherits来存储使用的数量

我的代码:

class hotel_room(osv.osv):
    _name = 'hotel.room'
    _inherits = {
                 'product.product':'product_id',
                 'stock.change.product.qty': 'quantity_id'
    }
    _description = 'Hotel Room'
    _columns = {
        'product_id': fields.many2one('product.product', 'Product_id', required=True, ondelete='cascade'),
        'quantity_id': fields.many2one('stock.change.product.qty', 'Quantity_id', required=True, ondelete='cascade'),
        'floor_id':fields.many2one('hotel.floor', 'Floor No', required=True),
        'max_limit':fields.integer('Max Person Limit'),
        'desc': fields.text('Description'),
        'avail_status':fields.selection([('unassigned', 'Unassigned'), ('confirmed', 'Confirmed'), ('assigned', 'Assigned')], 'Room Status'),
        'room_amenities':fields.many2many('hotel.room.amenities', 'temp_tab', 'room_amenities', 'rcateg_id', 'Room Amenities'),
    }
    _defaults = {
        'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'hotel.room'),
        'is_room': True,
        'new_quantity': 1.00,
        'avail_status':'unassigned'
    }
hotel_room()
2013-08-14 06:04:05,611 7899 INFO hms openerp.modules.loading: loading 1 modules...
    2013-08-14 06:04:05,905 7899 INFO hms openerp.modules.loading: loading 55 modules...
    2013-08-14 06:04:06,059 7899 INFO hms openerp.modules.module: module hms: creating or updating database tables
    2013-08-14 06:04:06,126 7899 ERROR hms openerp.netsvc: Many2One relationships from non-transient Model to TransientModel are forbidden
    Traceback (most recent call last):
      File "/var/app/openerp/server/openerp/netsvc.py", line 292, in dispatch_rpc
        result = ExportService.getService(service_name).dispatch(method, params)
      File "/var/app/openerp/server/openerp/service/web_services.py", line 622, in dispatch
        security.check(db,uid,passwd)
      File "/var/app/openerp/server/openerp/service/security.py", line 40, in check
        pool = pooler.get_pool(db)
      File "/var/app/openerp/server/openerp/pooler.py", line 49, in get_pool
        return get_db_and_pool(db_name, force_demo, status, update_module)[1]
      File "/var/app/openerp/server/openerp/pooler.py", line 33, in get_db_and_pool
        registry = RegistryManager.get(db_name, force_demo, status, update_module)
      File "/var/app/openerp/server/openerp/modules/registry.py", line 192, in get
        update_module)
      File "/var/app/openerp/server/openerp/modules/registry.py", line 218, in new
        openerp.modules.load_modules(registry.db, force_demo, status, update_module)
      File "/var/app/openerp/server/openerp/modules/loading.py", line 341, in load_modules
        processed = load_marked_modules(cr, graph, states_to_load, force, status, report, loaded_modules, update_module)
      File "/var/app/openerp/server/openerp/modules/loading.py", line 256, in load_marked_modules
        loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
      File "/var/app/openerp/server/openerp/modules/loading.py", line 165, in load_module_graph
        init_module_models(cr, package.name, models)
      File "/var/app/openerp/server/openerp/modules/module.py", line 374, in init_module_models
        result = obj._auto_init(cr, {'module': module_name})
      File "/var/app/openerp/server/openerp/osv/orm.py", line 3187, in _auto_init
        self._m2o_add_foreign_key_checked(k, dest_model, f.ondelete)
      File "/var/app/openerp/server/openerp/osv/orm.py", line 2885, in _m2o_add_foreign_key_checked
        'Many2One relationships from non-transient Model to TransientModel are forbidden'
    AssertionError: Many2One relationships from non-transient Model to TransientModel are forbidden
2013-08-14 06:04:06,135 7899 INFO hms werkzeug: 127.0.0.1 - - [14/Aug/2013 06:04:06] "POST /web/dataset/call_button HTTP/1.1" 200 -
回溯:

class hotel_room(osv.osv):
    _name = 'hotel.room'
    _inherits = {
                 'product.product':'product_id',
                 'stock.change.product.qty': 'quantity_id'
    }
    _description = 'Hotel Room'
    _columns = {
        'product_id': fields.many2one('product.product', 'Product_id', required=True, ondelete='cascade'),
        'quantity_id': fields.many2one('stock.change.product.qty', 'Quantity_id', required=True, ondelete='cascade'),
        'floor_id':fields.many2one('hotel.floor', 'Floor No', required=True),
        'max_limit':fields.integer('Max Person Limit'),
        'desc': fields.text('Description'),
        'avail_status':fields.selection([('unassigned', 'Unassigned'), ('confirmed', 'Confirmed'), ('assigned', 'Assigned')], 'Room Status'),
        'room_amenities':fields.many2many('hotel.room.amenities', 'temp_tab', 'room_amenities', 'rcateg_id', 'Room Amenities'),
    }
    _defaults = {
        'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'hotel.room'),
        'is_room': True,
        'new_quantity': 1.00,
        'avail_status':'unassigned'
    }
hotel_room()
2013-08-14 06:04:05,611 7899 INFO hms openerp.modules.loading: loading 1 modules...
    2013-08-14 06:04:05,905 7899 INFO hms openerp.modules.loading: loading 55 modules...
    2013-08-14 06:04:06,059 7899 INFO hms openerp.modules.module: module hms: creating or updating database tables
    2013-08-14 06:04:06,126 7899 ERROR hms openerp.netsvc: Many2One relationships from non-transient Model to TransientModel are forbidden
    Traceback (most recent call last):
      File "/var/app/openerp/server/openerp/netsvc.py", line 292, in dispatch_rpc
        result = ExportService.getService(service_name).dispatch(method, params)
      File "/var/app/openerp/server/openerp/service/web_services.py", line 622, in dispatch
        security.check(db,uid,passwd)
      File "/var/app/openerp/server/openerp/service/security.py", line 40, in check
        pool = pooler.get_pool(db)
      File "/var/app/openerp/server/openerp/pooler.py", line 49, in get_pool
        return get_db_and_pool(db_name, force_demo, status, update_module)[1]
      File "/var/app/openerp/server/openerp/pooler.py", line 33, in get_db_and_pool
        registry = RegistryManager.get(db_name, force_demo, status, update_module)
      File "/var/app/openerp/server/openerp/modules/registry.py", line 192, in get
        update_module)
      File "/var/app/openerp/server/openerp/modules/registry.py", line 218, in new
        openerp.modules.load_modules(registry.db, force_demo, status, update_module)
      File "/var/app/openerp/server/openerp/modules/loading.py", line 341, in load_modules
        processed = load_marked_modules(cr, graph, states_to_load, force, status, report, loaded_modules, update_module)
      File "/var/app/openerp/server/openerp/modules/loading.py", line 256, in load_marked_modules
        loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
      File "/var/app/openerp/server/openerp/modules/loading.py", line 165, in load_module_graph
        init_module_models(cr, package.name, models)
      File "/var/app/openerp/server/openerp/modules/module.py", line 374, in init_module_models
        result = obj._auto_init(cr, {'module': module_name})
      File "/var/app/openerp/server/openerp/osv/orm.py", line 3187, in _auto_init
        self._m2o_add_foreign_key_checked(k, dest_model, f.ondelete)
      File "/var/app/openerp/server/openerp/osv/orm.py", line 2885, in _m2o_add_foreign_key_checked
        'Many2One relationships from non-transient Model to TransientModel are forbidden'
    AssertionError: Many2One relationships from non-transient Model to TransientModel are forbidden
2013-08-14 06:04:06,135 7899 INFO hms werkzeug: 127.0.0.1 - - [14/Aug/2013 06:04:06] "POST /web/dataset/call_button HTTP/1.1" 200 -

为我提供有关此断言错误的建议

这是合乎逻辑的,因为瞬态模型临时保存数据,瞬态表中的所有数据都会频繁刷新。所以,在非瞬态表中使用此类瞬态表的ref.并不是一个好的解决方案。最好保持瞬态到瞬态或非瞬态到非瞬态的关系。

你的意思是说
库存.变动.产品.数量
产品.产品
是瞬态模型吗??在这种情况下,u所指的瞬态模型瞬态模块是osv.osv_内存模型,用于存储临时数据
product.product
是非瞬态模型,其中
stock.change.product.qty
是数据存储不是永久的瞬态模型