Openerp 如何在编辑表单中显示/刷新相关字段

Openerp 如何在编辑表单中显示/刷新相关字段,openerp,Openerp,我有一个对象shipping,其中有一个字段product,该字段属于与manyOne类型相关的manyOne,它引用了包含一个产品(manyOne)的manyOne对象contract。创建装运时,在保存装运前不会显示产品。此外,编辑时,产品不会随合同而更改 我试图创建一个onchange事件来返回新的产品值,但没有成功 当关系更改时,它们是否是刷新相关字段的方法 穆罕默德 阿里 是如果字段相关,则只有在保存记录时才会显示值。因为您保存了记录,ORM将链接相关字段值,网页将读回并显示给您 但

我有一个对象
shipping
,其中有一个字段
product
,该字段属于与manyOne类型相关的manyOne,它引用了包含一个产品(manyOne)的manyOne对象
contract
。创建装运时,在保存装运前不会显示产品。此外,编辑时,产品不会随合同而更改

我试图创建一个onchange事件来返回新的产品值,但没有成功

当关系更改时,它们是否是刷新相关字段的方法

  • 穆罕默德
    • 阿里

      是如果字段相关,则只有在保存记录时才会显示值。因为您保存了记录,ORM将链接相关字段值,网页将读回并显示给您

      但若要在from上立即显示值,您可以使用“更改”上的
      ,当您更改字段本身时,它可以更改任何字段的值


      问候。

      我觉得
      销售、订单
      库存、挑选
      标准物品非常接近您的需要。您最好扩展标准对象,而不是从头开始创建新对象

      关于你的问题,你需要改变你的行为,所以你应该尝试修正这个不起作用的方法。 在6.1中有一个很好的例子。请参见
      crm/crm.py
      中的
      crm\u base
      对象

      您可以在CRM Lead表单中看到它的作用):选择合作伙伴时,地址和电子邮件会自动填充。您还需要查看
      crm\crm\u lead\u view.xml中的视图id
      crm\u case\u form\u view\u opor
      ,以检查该方法的使用方式

      型号代码为:

      def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
          """This function returns value of partner email based on Partner Address
          :param ids: List of case IDs
          :param add: Id of Partner's address
          :param email: Partner's email ID
          """
          data = {'value': {'email_from': False, 'phone':False}}
          if add:
              address = self.pool.get('res.partner.address').browse(cr, uid, add)
              data['value'] = {'email_from': address and address.email or False ,
                               'phone':  address and address.phone or False}
          if 'phone' not in self._columns:
              del data['value']['phone']
          return data
      
      def onchange_partner_id(self, cr, uid, ids, part, email=False):
          """This function returns value of partner address based on partner
          :param ids: List of case IDs
          :param part: Partner's id
          :param email: Partner's email ID
          """
          data={}
          if  part:
              addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
              data = {'partner_address_id': addr['contact']}
              data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
          return {'value': data}
      
      视图侧代码为:

      <field name="partner_id" select="1" colspan="2" 
        on_change="onchange_partner_id(partner_id, email_from)" string="Customer" />
      <field name="partner_address_id" string="Contact" colspan="1"
        on_change="onchange_partner_address_id(partner_address_id, email_from)" />
      
      
      
      非常感谢。我的
      合同
      实际上是继承自
      采购订单
      。此外,
      发货
      \u继承自
      account.analysis.account
      ,并链接到多个
      库存领料
      。我的
      onchange
      确实坏了。谢谢。您可能会选择另一种方式:
      合同
      继承自
      账户。分析。账户
      发货
      继承自
      采购。订单
      。否。
      合同
      是与海外供应商签订的长期采购合同<代码>装运
      (实际上是
      船舶
      )\u继承自
      account.Analytical.account
      ,因为每个产品装运/船舶都是作为一个项目处理的,有自己的费用和损益。感谢您的帮助。
      onchange
      被破坏,所以我修复了它。@firebug:on\u相关(m20)字段上的更改未被触发。