openerp函数字段不起作用 - OpenERP v7

时间:2015-06-30 19:55:40

标签: openerp odoo

我遇到的问题是获取一个函数字段来显示我在用于扩展stock.picking.out表单的自定义模块中的函数返回的字符串。理想情况下,我希望显示存储在数据库中的字段中的特定字符串,但这是另一个问题,因为我甚至无法显示通用字符串..

以下是我的自定义类中的字段定义:

_columns = {
    'my_field_name': fields.function(_my_func, type='char', string='description', store=True, method=True, readonly=True),
}

这是我对'_my_func'的定义:

def _my_func(self, cr, uid, ids, field_name, arg, context=None):
    str="some string to be displayed"
    return str

以下是该字段的XML:

<field name="my_field_name" string="Here is my string:" class="oe_inline"/>

我搜索过OpenERP开发书以及他们的论坛和论坛,并且相信我已经遵循了该领域的所有正确语法,因此非常感谢任何帮助。

6 个答案:

答案 0 :(得分:1)

你需要改进你的功能/方法,

def _my_func(self, cr, uid, ids, field_name, arg, context=None):
    res = {}
    for rec in self.browse(cr, uid, ids, context=context):
        res[rec.id] = 'Some string'
    return res

在编写功能字段(最多v7)时,请确保返回

之类的字典
{17: "some string"}

如果您有多个字段,则可以像

{17: {'field_one': 'value 1', 'field_two': 'value 1'}}

编辑: 同样在_columns中,请删除readonly=True之类的

_columns = {
    'my_field_name': fields.function(_my_func, type='char', string='description', store=True, method=True),
}

希望这有帮助。

答案 1 :(得分:0)

您必须改进功能登录

你可以做这样的事情。

def _my_func(self, cr, uid, ids, field_name, arg, context=None)
    v={}
    if field_name:
        v['my_field_name'] = " some string to be displayed "
    return {'value': v}

然后最后你的功能逻辑像魅力一样工作。

我希望这对你有用:)

答案 2 :(得分:0)

尝试以下,

def _my_func(self, cr, uid, ids, field_name, arg, context=None):
    res = {}
    for obj in self.browse(cr, uid, ids, context=context):
        ###Set your string here
        str="some string to be displayed"
        res[obj.id]['my_field_name'] =  str

    return res

答案 3 :(得分:0)

如果你对OpenERP v7感到困惑,你总是可以尝试使用Odoo(OpenERP v8)。它更容易上班。

from openerp import models, fields,api

class my_class(models.Model):

_name="my.class"
my_field_name=fields.Text(string="description", compute=_my_func, store=True, readonly=True)

def _my_func(self):
    self.my_field_name = "some string to be displayed"

我希望这可以帮到你!

答案 4 :(得分:0)

试试这个,

def _my_func(self, cr, uid, ids, field_name, arg, context=None):
    result = {}
    for record in self.browse(cr, uid, ids):
        str="some string to be displayed"
        result[record.id] = str
    return result

如果在函数字段上使用store = True,那么它将首次被访问,它将结果存储在数据库中,并且从下次调用时不会。 要每次 store = True 访问功能字段,请参阅 sale.py [amount_total] 字段。我们必须编写一些附加代码

答案 5 :(得分:0)

您也可以这样说:

不使用浏览方法..

def _my_func(self, cr, uid, ids, field_name, arg, context=None):
    result = {}
    str="some string to be displayed"
    result[ids[0]] = str
    return result

确保在模型字段类型中应为char / text。