【问题标题】:openerp function field not working - OpenERP v7openerp 功能字段不工作 - OpenERP v7
【发布时间】:2015-06-30 19:55:39
【问题描述】:

我在获取函数字段以显示由自定义模块中的函数返回的字符串时遇到问题,我用于扩展 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 开发手册以及他们的论坛和这些论坛,并且相信我已经遵循了该领域的所有正确语法,因此非常感谢任何帮助。

【问题讨论】:

    标签: openerp odoo


    【解决方案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=Truelike

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

    希望这会有所帮助。

    【讨论】:

    • 感谢您的建议,我尝试了每个人的答案(因为它们几乎都彼此相同)并且我的字段仍然没有显示字符串,我的字段 python 代码是否正确?感谢您的帮助!
    • @nick 哦。您将该字段设为只读。检查我的更新答案。
    • Readonly 不应干扰您的回答。 OpenERP V7 函数字段默认为只读,只要没有定义逆函数即可。我认为他的问题是迄今为止许多其他人遇到的问题:stock.picking.out。尝试 guewen 的尝试 3 发现 here。在 stock.picking 和 stock.picking.out 上定义字段(为了最简单的使用,定义它们完全相同)。希望这会有所帮助
    • 你能在你的答案@AtulArvind 中暗示这个问题吗?他必须使用V7,所以他应该知道这会导致一些问题;-)
    【解决方案2】:

    只是你必须要改进你的登录功能

    你可以做一些这样的事情。

    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}
    

    然后你的函数逻辑终于像魅力一样工作了。

    我希望这对你有帮助:)

    【讨论】:

      【解决方案3】:

      尝试关注,

      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
      

      【讨论】:

        【解决方案4】:

        如果您对 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"
        

        希望对你有帮助!

        【讨论】:

        • 谢谢,不过我不能使用 v8
        【解决方案5】:

        试试这个,

        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] 字段。我们必须编写一些额外的代码

        【讨论】:

          【解决方案6】:

          你也可以这样给:

          不使用浏览方法..

          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
          

          确保模型中的字段类型应该是字符/文本。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-24
            • 1970-01-01
            • 1970-01-01
            • 2013-07-20
            相关资源
            最近更新 更多