【问题标题】:openerp - res.partner: default value depending on company typeopenerp - res.partner:默认值取决于公司类型
【发布时间】:2016-03-17 11:49:53
【问题描述】:

创建新联系人时,如果联系人是“个人”,我想将“客户”设置为 True,将“供应商”设置为 False,反之亦然:如果联系人是公司:将“客户”设置为 False,并且“供应商”为真。

到目前为止,我已经尝试在 xml 文件中进行一些更改,但没有发生任何事情..

<field name="supplier">{[('is_company','=', True)],'default_customer': 0,'default_supplier': 1} </field>

有什么建议吗?

提前谢谢你

以后我的.py

# -*- coding: utf-8 -*-
from openerp.osv import fields, osv
import time
import datetime
from datetime import datetime, date, time
from openerp import api 


class mypartner_custom(osv.osv):
    _inherit = 'res.partner'

    _columns = {

            'plafond_credit' : fields.float(string = 'Plafond Crédit',digits=(6,2)),
            'cin' : fields.char(string = 'CIN', size=15),


            }
mypartner_custom()

@api.onchange('is_company')
def change_company_type(self):
   if self.is_company == True:
      self.customer = False
      self.supplier = True
   else :
      self.customer = True
      self.supplier = False

【问题讨论】:

    标签: python xml openerp odoo-9


    【解决方案1】:

    使用 onchange 方法:

    @api.onchange('company_type')
    def change_company_type(self):
       if self.company_type == 'person':
          self.customer = True
          self.supplier = False
       else :
          self.customer = True
          self.supplier = True
    

    不要忘记默认值,因为此方法仅在 company_type 值更改时执行..

    【讨论】:

    • 非常感谢您的回答。我真的不明白为什么它不起作用(实际上什么也没发生)我已经尝试使用此代码的 onchange 装饰器 is_company 字段 @api.onchange('is_company') def change_company_type(self): if self.is_company == True: self.customer = False self.supplier = True else : self.customer = True self.supplier = False 仍然没有
    • is_company 字段默认是不可见的,您是否更改了视图?
    • 我还在表单视图中。我只是想尝试一下这个字段,因为“company_type”没有任何改变
    • 您在模型中使用新的 api 吗?
    • 是的,我正在使用 Odoo V9
    【解决方案2】:

    您正在使用旧的 api,因此请改用此方法:

    def onchange_company_type(self, cr, uid, ids, company_type, context=None):
      return {'value': {'customer': False, 'supplier': True}} if company_type=='person' else {'value': {'customer': True, 'supplier': False}}
    

    并在 xml 文件的 company_type 字段中添加此属性

    on_change="onchange_company_type(company_type)"
    

    【讨论】:

    • 仍然没有任何变化.. 如何使用新的 api 和 onchange 方法?
    • 你需要把方法放在 mypartner_custom 类里面重启你的服务器并更新模块
    【解决方案3】:

    重写create方法,检查对应的值,随意设置:

    def create(self, cr, uid, vals, context=None):
        if vals['contact'] == "Individual":
            vals['customer'] = True
            vals['supplier'] = False
        elif vals['contact'] == "Company":
            vals['customer'] = False
            vals['supplier'] = True
        return super(res_partner, self).create(cr, uid, vals, context=context)
    

    【讨论】:

    • 这将在保存记录后运行,所以如果你想手动选择客户和供应商它不会起作用,我认为他想要的是默认值。
    • 感谢您的快速响应:我已在模块的 .py 上尝试过此操作,但没有出现预期的行为:def create(self, cr, uid, vals, context=None): if vals['company_type'] == "person": vals['customer'] = True vals['supplier'] = False elif vals['company_type'] == "company": vals['customer'] = False vals['supplier'] = True return super(res_partner, self).create(cr, uid, vals, context=context)
    • @ThinkMAL,发生了什么?你期望什么行为?
    • 你在扩展 res_partner 模型吗?
    • @TalesPádua:正如我的问题中所描述的那样:如果字段“is_company”被更改,则表单中的“供应商”和“客户”字段发生变化:如果公司 => 供应商,如果不是 => 客户
    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多