【问题标题】:OpenERP one2many issueOpenERP one2many 问题
【发布时间】:2013-10-28 15:17:17
【问题描述】:

我有以下几点:

shipment_obj = self.pool.get('stock.picking.in').browse(cr, uid, context.get('active_id'))

这返回正确的对象,我可以访问属性,但是当我访问 O2m 字段“move_lines”时,它返回 None 对象并且无法迭代。

我是否需要特殊的方式来访问特定进货的产品?

这是在现有的 OpenERP 中:

    'move_lines': fields.one2many('stock.move', 'picking_id', 'Internal Moves', states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}),
    'product_id': fields.related('move_lines', 'product_id', type='many2one', relation='product.product', string='Product'),

【问题讨论】:

    标签: openerp


    【解决方案1】:

    stock.picking.instock.picking.outstock.picking 实际上是同一个表 stock_pickingstock.picking 被认为是 stock.picking.instock.picking.out 的基础。我认为这个功能仍然存在一些问题,并且在 openerp v8 中得到了解决。所以当您需要浏览对象时,无论您是在浏览 stock.picking.in 还是 stock.picking.out,请使用 stock.picking

    【讨论】:

      【解决方案2】:

      使用时

      shipment_obj = self.pool.get('stock.picking.in').browse(cr, uid, context.get('active_id'))
      

      这里你会得到一个浏览记录的列表,你可以访问one2many字段move_lines喜欢

      for shipment_id in shipment_obj:
          move_lines = shipment_id.move_lines
      

      在这里你会得到列表中每条记录的 move_lines...

      【讨论】:

      • 结果如下:AttributeError: 'NoneType' object has no attribute 'move_lines'
      • browse 如果传递了单个 ID,则返回一个对象,如果传递了一个 ID 列表,则返回一个对象列表。这是来自文档。无论如何,我发现了这个问题,但现在我不知道该怎么想。原始 OP 中的代码有效,但前提是我添加了一个条件元素,我现在正在摸不着头脑。 for line in shipping_obj.move_lines: line.property etc... 有效,但前提是我在循环之前检查 ship_obj.move_lines 是否为 None。
      【解决方案3】:

      需要添加这个来解决问题:

      if context is not None and context.get('active_id'):
      

      这是我认为不需要检查上下文和active_id的方法调用方式,因为总会有上下文和active_id,我错了。

      【讨论】:

      • 我认为我们不需要使用您添加的行。shipment_obj.move_lines 如果有任何记录或空列表,将给我们一个对象列表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多