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

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

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

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

关于fields.function显示网络图片的问题



  • 我的目标是希望通过fields.function来获取外部网站图片显示到OE上,在开发过程中有以下问题:

    1. 我已经使用urllib2获取到了网络的图片opener.open('http://www.sajolab.com/sajolab.jpg'),然后使用read()将图片转换为Binary类型,但是在添加Module时却报 in ustr raise UnicodeError('unable de to convert %r' % (orig,))错误,相信应该是转码问题,请问各位大神,我在使用fields.function转码应该如何处理才可以正确显示??

    附上Python代码:
    from osv import osv, fields
    import urllib2
    import netsvc
    class product_product(osv.osv):
        _name = 'product.product'
        _inherit = 'product.product'
        _description = 'Product'

        def _get_image(self, cursor, user, ids, name, arg, context=None):
            image = {}
            logger = netsvc.Logger()
            opener = urllib2.build_opener()
            for id in ids:
                logger.notifyChannel('addon:' + self._name, netsvc.LOG_INFO, 'id:%s' % (id))
                image[id] = opener.open('http://www.sajolab.com/sajolab.jpg').read()
            logger.notifyChannel('addon:' + self._name, netsvc.LOG_INFO, 'image:%s' % (image))
            return image

        _columns = { 'image' : fields.function(_get_image, method=True, string='Product Image', type='binary', store=True), }

    product_product()



  • 问题已解决
    使用basse64转换编码. 😉 😉
    image[id] = base64.encodestring(opener.open('http://www.sajolab.com/sajolab.jpg').read())



  • 恭喜... 给贴子加个 标签吧.. 或者后面需要了解的人会检索到.