禁止从非瞬态模型到TransientModel的许多关系

时间:2013-08-14 06:12:09

标签: error-handling openerp

我试图在创建房间时(作为产品)提供产品的库存数量,因此使用stock.change.quantity.qty使用_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 -

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

1 个答案:

答案 0 :(得分:4)

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