Odoo Help


Computed value for binary fields

Aidas Bendoraitis
on 11/7/16, 4:22 PM 2,116 views

I am trying to create a model for product images in Odoo 10. A product image can have one original uploaded image and two computed versions: medium and small. This is the code I wrote:

# -*- coding: utf-8 -*-
from odoo import models, fields, api, tools

class ProductImage(models.Model):
    _name = 'product_images.product_image'
  _description = 'Product image'

    name = fields.Char(string="Alternative text")
  product_id = fields.Many2one('product.product', string='Product', ondelete='set null', index=True)
  original_image = fields.Binary(string='Original image')
    medium_image = fields.Binary(string='Medium image', compute='_resize_image', store=True)
  small_image = fields.Binary(string='Small image', compute='_resize_image', store=True)

  def _resize_image(self):
        for record in self.with_context(bin_size=False):
            data = tools.image_get_resized_images(record.original_image)
 record.medium_image = data['image_medium']
  record.small_image = data['image_small']

When I change the original_image in the form view or in the Odoo shell, _resize_image() is called, but medium_image and small_image values are not saved. What do I miss?

after save the form don't you see the image shrinks??

Axel Mendoza
on 11/8/16, 2:04 AM

Unfortunately not. I see empty values for the medium_image and small_image.

Aidas Bendoraitis
on 11/8/16, 8:15 AM

I also tried @api.onchange for the binary image, but that didn't work either.

Aidas Bendoraitis
on 11/8/16, 10:14 AM
Aidas Bendoraitis
On 11/8/16, 1:13 PM

After lots of trial and error, I found out that I can't set empty context for the record to be modified, because then the assignment statement doesn't save the record to the database. So I ended up with this code:

def _resize_image(self):
        original_image = self.with_context({}).original_image
if original_image:
            data = tools.image_get_resized_images(original_image)
self.medium_image = data['image_medium']
self.small_image = data['image_small']
            self.medium_image = ""
self.small_image = ""

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)


Asked: 11/7/16, 4:22 PM
Seen: 2116 times
Last updated: 11/8/16, 1:13 PM