Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

OE7.0中,如何取产品中供应商的个数



  • 在修改产品模块中,有一个业务,就是该产品中,追加了 是否区分供应商 的字段,为bit类型,假如沟上该字段,则供应商列表则不允许为空
    添加字段及如何摆放该字段的位置,则不细说了,使用xpath定位,并追加即可
    下面讲一下如何判断该字段是否沟选 ,假如沟上,再判定一次供应商列表是否为空

    经Ccode大神教导,要做到这一步,则需要重写write(假设我们处于修改的情况下),
    此时,所有修改的内容都会在vals中,没修改的则不在该数组中

    我先定义一个
        def write(self,cr,uid,ids,vals,context=None):
            val={}      #定义一个val来接收是否区分供应商 的沟有没有打上
            supplierList=[]  #供应商列表     
            IntCount={}      #供应商列表的个数
            if 'bitSupplier' in vals:  #假如该字段存在vals中
                val=vals['bitSupplier']  #读取bitSupplier的值
                if val==True:              #假如该值被打上沟,即为 True的状态,反之则为False
                    if 'seller_ids' in vals:
                        supplierList=vals['seller_ids']
                        IntCount=len(supplierList)  #供应商列表个数,重庆-mrshelly(49812643) 提示使用len,我原来使用Count出错,这点要注意,虽然现在也没明白,先记下来先
                        if IntCount<=0:  #                     
                            warning={
                                    'title':(u'提示'),
                                    'message':val
                                    }
                            raise osv.except_osv(u'系统提示','提示内容(自己设置)')
                        else: #假如都符合条件,则调用product中的write函数,不过我没写对,                 
                               
                   
            #return super(product_template,self).write(self,cr,uid,ids,vals,context=context);  #这句我没写对,还在修正中,请注意



  • 顶....



  • if vals.get('bitSupplier',False) and not vals.get('seller_ids',False):
        raise something

    return super()



  • [quote author=Jeff link=topic=5991.msg15047#msg15047 date=1366377098]
    if vals.get('bitSupplier',False) and not vals.get('seller_ids',False):
        raise something

    return super()
    [/quote]

    jeff写的就是精典,学习了



  • 顺便提一下今天的错误
    环境:本机系统:Win7  虚拟机:ubunt  服务器:ubunt 10.04桌面版

    raise osv.except_osv(u'系统提示','提示内容(自己设置)')
    如果这样写,上传到服务器中,运行时是提示错误的,
    提示:
    ascii codes can.t decode byte oxe80:ordinal not in range(128)

    我原本以为是我的本机虚拟机的是极点五笔输入法,而服务器的ubunt 中没有装有,于是就在服务器的ubunt中装了,结果问题依旧
    后来求助重庆-mrshelly(49812643) 
    总监眼神依然犀利
    指出原因是:在raise中,涉及到字符串,都要在前面加入 u
    应改为:
        raise osv.except_osv(u'错误提示',u'该产品已选择「是否区分供应商」,供应商列表不允许为空')

    重新上传,
    问题解决



  • 谢谢他享!!学习了!


Log in to reply