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

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

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

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

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

請教關於新式osv.osv_memory wizard內,_default值希望動態由資料庫取出該如何施作



  • 小弟希望在wizard的_default值希望動態由資料庫取出
    請問該讀取資料庫的程式碼該在哪邊加入
    如果說是要define一個 function又要如何在_defaults內讀取?
    感恩大大不吝指點

    Code:

    class wizard_create_prescription(osv.osv_memory):
        _name="create.prescription"
        _description = "Create Prescription"
        _columns = {
        'x_optom_id': fields.many2one('x_optom', 'Optometrist',domain=[('x_optom_code','!=','EZ')]),
        }
        _defaults = {
        'x_optom_id': '',
        }

        #Read DB
        x_optom=x_optom
        D=str(time.strftime("%Y-%m-%d", gmtime() ))
        cr.execute('select x_optom from x_dailywork_record where x_date='+str(D))
        resP = cr.fetchall()
        for rowP in resP:
            x_optom=str(rowP[0])



  • _defaults 中 指定 function , 在 function 里,  你想怎么取就怎么取, 原系统 addons 里, 有相关的代码, 找一段阅读一下就明白了.

    返回的是OE特定的内容.

    如 integer 返回的是 一个integer

    char 返回的是一个 char

    同样, many2one 肯定就返回的是一个 many2one 了...

    看看别的代码中. many2one 的 default 如何写,你就知道如何写了...



  • 請教mrshelly大
    小弟參照addons\base\res\res_compy.py當中 class res_compy(osv.osv)的_default呼叫function的寫法
    以最單純的char測試,可是仍然出錯,似乎是_defaults的呼叫Function錯誤 可是在res_compy.py中就是如此呼叫

    請教該如何修正 感恩

    class wizard_create_prescription(osv.osv_memory):

        _name="create.prescription"
        _description = "Create Prescription"

        _columns = {
        'x_optom_id': fields.char('x_optom_id', size=15),
        }

        _defaults = {
        'x_optom_id': _get_optom,
        }

        def _get_optom(self,cr,uid,ids):
            x_optom_name='Fiona'
            return x_optom_name



    [quote author=mrshelly link=topic=4170.msg11189#msg11189 date=1338180172]
    _defaults 中 指定 function , 在 function 里,  你想怎么取就怎么取, 原系统 addons 里, 有相关的代码, 找一段阅读一下就明白了.

    返回的是OE特定的内容.

    如 integer 返回的是 一个integer

    char 返回的是一个 char

    同样, many2one 肯定就返回的是一个 many2one 了...

    看看别的代码中. many2one 的 default 如何写,你就知道如何写了...
    [/quote]



  • 你確認你的代碼同res_company.py 的一樣?
    [code=python]
    ...
    class wizard_create_prescription(osv.osv_memory):

        _name="create.prescription"
        _description = "Create Prescription"

        _columns = {
        'x_optom_id': fields.char('x_optom_id', size=15),
        }

        def _get_optom(self,cr,uid,ids):
            x_optom_name='Fiona'
            return x_optom_name

        _defaults = {
        'x_optom_id': _get_optom,
        }

    ...
    [/code]



  • mrshelly大 您好
    小弟仿造res_company.py中class res_compy(osv.osv)的
    Line 84:  'rml_header' : fields.text('RML Header', required=True),
    Line 225: def _get_header(self,cr,uid,ids):
    Line 269: 'rml_header':_get_header,

    差異應該是一個為fields.text 另一個為fields.char
    可是就算我改成fields.text也會出錯


    [quote author=mrshelly link=topic=4170.msg11193#msg11193 date=1338191374]
    你確認你的代碼同res_company.py 的一樣?
    [code=python]
    ...
    class wizard_create_prescription(osv.osv_memory):

        _name="create.prescription"
        _description = "Create Prescription"

        _columns = {
        'x_optom_id': fields.char('x_optom_id', size=15),
        }

        def _get_optom(self,cr,uid,ids):
            x_optom_name='Fiona'
            return x_optom_name

        _defaults = {
        'x_optom_id': _get_optom,
        }

    ...
    [/code]
    [/quote]



  • 请仔细看我的代码与你的代码.
    前前后后, 你都没有说明你的"出"的什么"错"!...



  • mrshelly大
    經過您的提點,小弟再仔細比較-原來是function必須放置於_default之前
    (因為以前寫Java Class就沒有這種順序性的要求,所以一時沒想到會有影響)
    真是不好意思勞煩您再三提醒  感恩

    另外一個提問--Save,Save & Edit,Cancel 等三個按鈕不顯現的問題
    是否是在XML中訂義
    <act_windows
    view_type : "form"
    />
    小弟本來就有寫 但是無作用

    [quote author=mrshelly link=topic=4170.msg11196#msg11196 date=1338194528]
    请仔细看我的代码与你的代码.
    前前后后, 你都没有说明你的"出"的什么"错"!...
    [/quote]


Log in to reply