Skip to Content
Menu
This question has been flagged
1 Reply
3611 Views

Guys, I'm not sure how should it look like in NEW API format.....

<pre>

# image: all image fields are base64 encoded and PIL-supported

'image': fields.binary("Image",

help="This field holds the image used as image for the product, limited to 1024x1024px."),

'image_medium': fields.function(_get_image, fnct_inv=_set_image,

string="Medium-sized image", type="binary", multi="_get_image",

store={

'product.template': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10),

},

help="Medium-sized image of the product. It is automatically "\

"resized as a 128x128px image, with aspect ratio preserved, "\

"only when the image exceeds one of those sizes. Use this field in form views or some kanban views."),

'image_small': fields.function(_get_image, fnct_inv=_set_image,

string="Small-sized image", type="binary", multi="_get_image",

store={

'product.template': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10),

},

help="Small-sized image of the product. It is automatically "\

"resized as a 64x64px image, with aspect ratio preserved. "\

"Use this field anywhere a small image is required."),

</pre>

 <pre>

def _get_image(self, cr, uid, ids, name, args, context=None):

result = dict.fromkeys(ids, False)

for obj in self.browse(cr, uid, ids, context=context):

result[obj.id] = tools.image_get_resized_images(obj.image, avoid_resize_medium=True)

return result

def _set_image(self, cr, uid, id, name, value, args, context=None):

return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context)

</pre>

I can't make it work :(


Avatar
Discard
Best Answer

Hi @Dr Obx

You could try this:


from openerp import tools
from openerp import models, fields, api

class product_template_test(models.Model):
_name = 'product.template'

image = fields.Binary("Image", help="This field holds the image used as image for the product, limited to 1024x1024px."),
image_medium = fields.Binary(compute='_get_image', inverse='_set_image', string="Medium-sized image", store=True, help="Medium-sized image of the product. It is automatically "\
"resized as a 128x128px image, with aspect ratio preserved, "\
"only when the image exceeds one of those sizes. Use this field in form views or some kanban views.")
image_small = fields.Binary(compute='_get_image', inverse='_set_image', string="Small-sized image", store=True, help="Small-sized image of the product. It is automatically "\
"resized as a 64x64px image, with aspect ratio preserved. "\
"Use this field anywhere a small image is required.")
@api.multi
def _get_image(self):
for obj in self:
result = tools.image_get_resized_images(obj.image, avoid_resize_medium=True)
obj.image_medium = result.get('image_medium', False)
obj.image_small = result.get('image_small', False)
return result

@api.multi
def _set_image(self):
for obj in self:
obj.image_medium = tools.image_resize_image_big(obj.image_medium)
obj.image_small = tools.image_resize_image_big(obj.image_small)
return True

Notes:

-   Maybe you don't need the inverse argument in the fields

-   The store=dict is not supported in the new api but maybe you don't need it in this case.

Avatar
Discard
Author

I did exactly the same before I read your post, but when I'm trying to use it .... it does nothing whatever I do :) I mean it wont re-scale images

Not working for me either. I get a RuntimeError: maximum recursion depth exceeded