outbound_line = fields.One2many('roke.maintenance.management.line', 'outbound', string='出库') # outbound = fields.Many2one('roke.warehouse.statistics', string='出库') warehouse_state = fields.Selection([('initial', '初始'), ('confirm', '确认出库'), ('overrule', '撤销')], string='状态', default='initial', track_visibility='onchange')
时间: 2024-01-04 17:04:14 浏览: 176
这段代码是用于定义一个Odoo模型的字段。具体来说,这个模型包含了三个字段:
1. outbound_line:一个 One2many 字段,表示这个模型与另一个名为 roke.maintenance.management.line 的模型有一对多的关系。也就是说,一个这个模型的实例可以对应多个 roke.maintenance.management.line 的实例。
2. outbound:一个 Many2one 字段,表示这个模型与另一个名为 roke.warehouse.statistics 的模型有多对一的关系。也就是说,多个这个模型的实例可以对应一个 roke.warehouse.statistics 的实例。
3. warehouse_state:一个 Selection 字段,表示这个模型具有三种状态:'initial'(初始)、'confirm'(确认出库)和'overrule'(撤销)。这个字段的默认值为'initial',并且设置了 track_visibility='onchange' 属性,表示当这个字段的值发生变化时,这个变化会被记录并显示在界面上。
相关问题
code = fields.Char(string='唯一编号') item = fields.Many2one('roke.item.information',string='物料') Destination = fields.Many2one('roke.warehouse.location', string='仓库位置') model = fields.Char(string='型号') remark = fields.Text(string='备注') price = fields.Float(string='单价') quantity = fields.Float(string='数量') occupied_quantity = fields.Float(string='已占有数量',compute='_compute_occupied_quantity', store=True) available_inventory = fields.Float(string='可用库存',compute='_compute_available_inventory', store=True) storage = fields.Many2one('roke.storage',string='入库') outbound = fields.Many2one('roke.maintenance.management',string='出库')
这是一个 Python 中的 Odoo 数据模型类,包含了一些字段,包括:唯一编号、物料、仓库位置、型号、备注、单价、数量、已占有数量、可用库存、入库、出库等。其中,物料和仓库位置是 Many2one 类型,表示与其他模型类之间存在多对一的关系;已占有数量和可用库存是通过 _compute_occupied_quantity 和 _compute_available_inventory 方法计算得来的。这些字段用于描述某个物料在某个仓库的库存情况,包括其数量、价格、存储和出库信息等。
def action_confirm(self): if not self.outbound_line: raise UserError('请录入出库明细!') for record in self.outbound_line: if record.quantity < record.available_inventory: database_dict = { "available_inventory": record.available_inventory - record.quantity } outbound = self.env['roke.warehouse.statistics'].search([('code', '=', record.code.id)]) outbound.write(database_dict) else: raise UserError('当前数量大于库存数量!') self.warehouse_state = 'confirm'这个在另一个表中没有数据
如果在 `roke.warehouse.statistics` 表中没有符合搜索条件的记录,则 `search()` 方法将返回空记录集,因此在尝试访问空记录集时会引发异常。您需要在执行 `write()` 操作之前检查是否存在符合条件的记录,如果没有,则需要进行相应的处理,例如创建新的记录或引发警告。
下面是一个可能的解决方案:
```
def action_confirm(self):
if not self.outbound_line:
raise UserError('请录入出库明细!')
for record in self.outbound_line:
if record.quantity < record.available_inventory:
database_dict = {
"available_inventory": record.available_inventory - record.quantity
}
# 检查是否存在符合条件的记录
outbound = self.env['roke.warehouse.statistics'].search([('code', '=', record.code.id)])
if outbound:
outbound.write(database_dict)
else:
# 如果不存在符合条件的记录,可以选择创建新的记录或引发警告
# 例如:
# self.env['roke.warehouse.statistics'].create({
# 'code': record.code.id,
# 'available_inventory': record.available_inventory - record.quantity
# })
raise UserError('找不到符合条件的记录!')
else:
raise UserError('当前数量大于库存数量!')
self.warehouse_state = 'confirm'
```
在上面的示例中,如果没有符合条件的记录,代码将引发一个警告,您也可以选择使用 `create()` 方法创建一个新的记录。请根据您的实际需求进行相应的处理。
阅读全文