【问题标题】:Odoo get data from another model with self.envOdoo 使用 self.env 从另一个模型获取数据
【发布时间】:2015-08-26 09:48:10
【问题描述】:

对于 Odoo 仓库模块,当质量控制想要将产品转移到库存时,我必须检查所有必填字段是否已填写。 目前一切正常,但质量控制的位置目前是硬编码的。这意味着当有人使用另一个库存位置进行质量控制时,他们将不得不更改代码。

我已经通过 Odoo 文档进行了搜索,据我所知,对于新的 api,我必须使用 self.env 而不是 self.pool.get。 (我添加了旧代码作为注释。) 调试时,stock.warehouse 似乎在 self.pool 而不是 self.env 中(但我想这可能只是那些“Odoo”的东西之一)。

第二件事是我已经硬编码了当前的 company_id “1”。 我认为如果那是一个变量也是最好的,那将是最好的。

我希望有人可以帮助我解决这个问题。

提前致谢

class stock_transfer_details(models.TransientModel):
    _inherit = "stock.transfer_details"

    @api.one
    def do_detailed_transfer(self):
        res = super(stock_transfer_details, self).do_detailed_transfer()
        # Check if all the required lot additional fields have been filled.
        # Else raise warning.
        # TODO Replace hardcoded Quality location by database reference

        warehouse = self.env("stock.warehouse").search([("company_id", "=", "1")])
        # self.pool.get("stock.warehouse").browse(cr, uid, item["wh_qc_stock_loc_id"], context=context)

        qc_location = warehouse.wh_qc_stock_loc_id

        missing_mandatory_fields = []
        if self.picking_source_location_id.id == 14:
            item_ids = self.mapped("item_ids")
            for item in item_ids:
                additional_fields = item.lot_id.mapped("lot_lot_additional_fields")
                for field in additional_fields:
                    if field.lot_additional_fields.mandatory and not field.value:
                        if item.lot_id.name not in missing_mandatory_fields:
                            missing_mandatory_fields.append(item.lot_id.name)

        if missing_mandatory_fields:
            error_message = "All required fields for the serial numbers must be filled! \n"
            error_message += "Serial numbers: \n"
            for item in missing_mandatory_fields:
                error_message += item + "\n"
            raise exceptions.Warning(error_message)

        return res

【问题讨论】:

    标签: python database search odoo-8


    【解决方案1】:

    尝试下一个代码:

    for item in self.pack_move_items:
       warehouse = self.env['stock.warehouse'].browse(item.wh_qc_stock_loc_id.mapped('id'))
    

    【讨论】:

    • 再次感谢您的快速响应。我没有字段 pack_move_items,在这种情况下它不起作用。我还检查了打开软件包时该字段是否可用,但这也无济于事。
    • 好的!因此,在您的旧代码中,您有一个名为 item 的字典。你能在这里写它是从哪里来的吗?
    • 我不确定您在哪里看到名为 item 的字典。我在这段代码中唯一的“项目”是我在 item_ids 中用于项目的那个。
    • 我的意思是这个:self.pool.get("stock.warehouse").browse(cr, uid, item["wh_qc_stock_loc_id"], context=context)
    • 啊,那个。是的,这只是我尝试过但没有奏效的方法。
    【解决方案2】:

    经过大量研究,我已经能够弄清楚这是如何工作的。

    这是我用来获取当前仓库质量位置的代码:

    wh_qa_location = (self.env["stock.warehouse"].search([("partner_id.id", "=", self.create_uid.company_id.id)])).wh_qc_stock_loc_id
    

    首先,我将查找员工所在的当前仓库。一旦找到,我将简单地获取 wh_qc_stock_loc_id 的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 2016-03-01
      相关资源
      最近更新 更多