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

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

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

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

OpenERP在product中增加外部网络链接图片



  • 最近的一个项目要求在Product_Template中增加类似与HTML中<img src=”" />的形式的图片,效果如图:
    [img]http://blog.sajolab.com/wp-content/uploads/2011/05/product_img_extra.jpg[/img]

    product_img_extra.py
    [code]
    from osv import osv, fields
    import urllib2
    import base64
    class product_template_img(osv.osv):
        _name = 'product.template'
        _inherit = 'product.template'
        _description = 'Product Extra Image'

        def _get_image(self, cursor, user, ids, name, arg, context=None):
            image = {}
            opener = urllib2.build_opener()
            res = self.read(cursor, user, ids, ['image_link'])
            image_link = res[0]['image_link']
            if image_link:
                pic = base64.encodestring(opener.open(image_link).read())
                for id in ids:
                    image[id] = pic
            return image

        _columns = {
            'image_link' : fields.char('Image Link', size=180),
            'image' : fields.function(_get_image, method=True, string='Product Image', type='binary', store=False),
        }

    product_template_img()
    [/code] 

    product_img_extra_view.xml
    [code]
    <?xml version="1.0" encoding="utf-8"?>
    <openerp>
    <data>
    <record id="product_img_view" model="ir.ui.view">
    <field name="name">product.template.product.form</field>
    <field name="model">product.template</field>
    <field name="type">form</field>
    <field name="inherit_id" ref="product.product_template_form_view" />
    <field name="arch" type="xml">
    <field name="name" position="before">
    <field name="image" widget="image" nolabel="1" img_width="168" img_height="168" colspan="4"/>
    <field name="image_link" colspan="4"/>
    </field>
    </field>
    </record>
    </data>
    </openerp>

    [/code]

    由于OpenERP的基本开发概念的其中一点是读取数据库动态生成界面.这时我就想到了使用fields.function来在界面生成时做一些特别的处理.

    product_img_extra.py中的_columns将对productTemplate增加image_link和image两个column.其中image_link用于保存图片链接的column,当界面生成时通过链接读取图片.image为显示图片的column,但由于store已设置为False所以不会直接保存到数据库中,而只会在界面生成时运行.

    因为需要读取外部链接,所以需要用到Python自带的urllib2模块,值得注意的是opener.open(image_link).read()获取回来的虽然已经是二进制数据,但仍需要使用base64.encodestring对其进行转码才可以被所识别.

    转载自:http://blog.sajolab.com/?p=52



  • 最近的一个项目要求在Product_Template中增加类似与HTML中<img src=”" />的形式的图片,效果如图:
    [img]http://blog.sajolab.com/wp-content/uploads/2011/05/product_img_extra.jpg[/img]

    product_img_extra.py
    [code]
    from osv import osv, fields
    import urllib2
    import base64
    class product_template_img(osv.osv):
        _name = 'product.template'
        _inherit = 'product.template'
        _description = 'Product Extra Image'

        def _get_image(self, cursor, user, ids, name, arg, context=None):
            image = {}
            opener = urllib2.build_opener()
            res = self.read(cursor, user, ids, ['image_link'])
            image_link = res[0]['image_link']
            if image_link:
                pic = base64.encodestring(opener.open(image_link).read())
                for id in ids:
                    image[id] = pic
            return image

        _columns = {
            'image_link' : fields.char('Image Link', size=180),
            'image' : fields.function(_get_image, method=True, string='Product Image', type='binary', store=False),
        }

    product_template_img()
    [/code] 

    product_img_extra_view.xml
    [code]
    <?xml version="1.0" encoding="utf-8"?>
    <openerp>
    <data>
    <record id="product_img_view" model="ir.ui.view">
    <field name="name">product.template.product.form</field>
    <field name="model">product.template</field>
    <field name="type">form</field>
    <field name="inherit_id" ref="product.product_template_form_view" />
    <field name="arch" type="xml">
    <field name="name" position="before">
    <field name="image" widget="image" nolabel="1" img_width="168" img_height="168" colspan="4"/>
    <field name="image_link" colspan="4"/>
    </field>
    </field>
    </record>
    </data>
    </openerp>

    [/code]

    由于OpenERP的基本开发概念的其中一点是读取数据库动态生成界面.这时我就想到了使用fields.function来在界面生成时做一些特别的处理.

    product_img_extra.py中的_columns将对productTemplate增加image_link和image两个column.其中image_link用于保存图片链接的column,当界面生成时通过链接读取图片.image为显示图片的column,但由于store已设置为False所以不会直接保存到数据库中,而只会在界面生成时运行.

    因为需要读取外部链接,所以需要用到Python自带的urllib2模块,值得注意的是opener.open(image_link).read()获取回来的虽然已经是二进制数据,但仍需要使用base64.encodestring对其进行转码才可以被所识别.

    转载自:http://blog.sajolab.com/?p=52



  • 不错... .赞一个先....



  • 很聪明的想法



  • 思路相当的好,很受启发。



  • 问楼主及其他大牛。
    openobject里边的方法是在服务器端执行还是客户端执行。
    如果是在服务器端执行,那么我需要在客户端执行一段代码,怎么办?


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待