OpenERP在product中增加外部网络链接图片
-
最近的一个项目要求在Product_Template中增加类似与HTML中<img src=”" />的形式的图片,效果如图:
[img [检测到链接无效,已移除] /img]
product_img_extra.py<br />from osv import osv, fields<br />import urllib2<br />import base64<br />class product_template_img(osv.osv):<br /> _name = 'product.template'<br /> _inherit = 'product.template'<br /> _description = 'Product Extra Image'<br /><br /> def _get_image(self, cursor, user, ids, name, arg, context=None):<br /> image = {}<br /> opener = urllib2.build_opener()<br /> res = self.read(cursor, user, ids, ['image_link'])<br /> image_link = res[0]['image_link']<br /> if image_link:<br /> pic = base64.encodestring(opener.open(image_link).read())<br /> for id in ids:<br /> image[id] = pic<br /> return image<br /><br /> _columns = {<br /> 'image_link' : fields.char('Image Link', size=180),<br /> 'image' : fields.function(_get_image, method=True, string='Product Image', type='binary', store=False), <br /> }<br /><br />product_template_img()<br />
product_img_extra_view.xml<br /><?xml version="1.0" encoding="utf-8"?><br /><openerp><br /> <data><br /> <record id="product_img_view" model="ir.ui.view"><br /> <field name="name">product.template.product.form</field><br /> <field name="model">product.template</field><br /> <field name="type">form</field><br /> <field name="inherit_id" ref="product.product_template_form_view" /><br /> <field name="arch" type="xml"><br /> <field name="name" position="before"><br /> <field name="image" widget="image" nolabel="1" img_width="168" img_height="168" colspan="4"/><br /> <field name="image_link" colspan="4"/><br /> </field><br /> </field><br /> </record><br /> </data><br /></openerp><br /><br />
由于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