openerp功能字段不工作-openerp v7

openerp功能字段不工作-openerp v7,openerp,odoo,Openerp,Odoo,我在获取函数字段以显示自定义模块中函数返回的字符串时遇到问题,我正在使用自定义模块扩展stock.picking.out表单。理想情况下,我希望显示数据库中存储的字段中的特定字符串,但这是另一次的问题,因为我甚至无法显示通用字符串 以下是自定义类中的字段定义: _columns = { 'my_field_name': fields.function(_my_func, type='char', string='description', store=True, method=True,

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

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

_columns = {
    'my_field_name': fields.function(_my_func, type='char', string='description', store=True, method=True, readonly=True),
}
以下是我对“我的函数”的定义:

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开发手册以及他们的论坛和这些论坛,并且相信我已经遵循了该领域的所有正确语法,因此非常感谢您的帮助。

您必须改进您的登录功能

你可以这样做

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}
最后,你的函数逻辑就像一个魔咒

我希望这会对您有所帮助:)

尝试以下内容

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

您需要改进您的功能/方法,如

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'}}
编辑: 同样在
\u列中
请删除
readonly=True

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

希望这能有所帮助。

如果您对OpenERP v7有点困惑,您可以尝试使用Odoo(OpenERP v8),它更容易操作

from openerp import models, fields,api
类别my_类别(models.Model):

我希望这能帮助你

试试这个

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[金额合计]字段。我们必须编写一些附加代码,您也可以这样给出:

不使用浏览方法

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。

感谢您的建议,我尝试了每个人的答案(因为他们几乎完全相同),但我的字段仍然没有显示字符串,我的字段python代码正确吗?谢谢你的帮助@尼克:哦。您已将字段设置为只读。检查我的更新答案。只读不应干扰你的答案。OpenERP V7函数字段默认为只读,只要没有定义反函数即可。我认为他的问题是到目前为止其他很多人都有过的:股票。尝试找到guewen的第3次尝试。定义stock.picking和stock.picking.out上的字段(为便于使用,请将其定义为完全相同的字段)。希望这个帮助能让你在回答@AtulArvind时对这个问题有所提示?他必须使用V7,所以他应该知道这会导致一些问题;-)谢谢,不幸的是我不能用v8
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