Storage Image Product

storage_image_product
REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/19.0/storage_image_product
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYStorage
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSStéphane Bidoul, Laurent Mignon (ACSONE)
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/server-env:
    - server_environment
OCA/storage:
    - storage_image
    - storage_thumbnail
    - storage_file
    - storage_backend
odoo/odoo:
    - base
    - base_sparse_field
    - product
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - sale
    - sales_team
    - account_payment
    - account
    - onboarding
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python_slugify
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Attach images to products and categories

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
image_tag_view_form image.tag form New
image_tag_view_search image.tag search New
image_tag_view_tree image.tag list New
product_category_form_view product.category xpath Inherits product.product_category_form_view
product_category_image_relation_form category.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_category_image_relation_kanban category.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_image_relation_form product.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_image_relation_kanban product.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_kanban_view product.product field Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template field Inherits product.product_template_kanban_view
product_template_only_form_view product.template field Inherits product.product_template_only_form_view
product_variant_easy_edit_view product.product field Inherits product.product_variant_easy_edit_view
storage_image_view_form storage.image page Inherits storage_image.storage_image_view_form
Models touched (8)

New fields (2)
  • category_id Many2one → product.category
    index=True ondelete='cascade' required=True args: 'product.category'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'category')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (6)
  • apply_on Selection
    default=<expr> selection=[('product', 'Product'), ('category', 'Category')]
  • categ_img_rel_ids One2many → category.image.relation
    comodel_name='category.image.relation' inverse_name='tag_id' string='Category Image Relations'
  • name Char
    required=True
  • product_categ_count Integer
    compute='_compute_product_categ_count' string='# of Categories'
  • product_img_rel_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='tag_id' string='Product Image Relations'
  • product_tmpl_count Integer
    compute='_compute_product_tmpl_count' string='# of Products'
Public methods (2)
  • action_open_product_categories(self)
  • action_open_product_templates(self)

New fields (1)
  • image_ids One2many → category.image.relation
    inverse_name='category_id' args: 'category.image.relation'
Public methods (0)

No public methods.

New fields (4)
  • attribute_value_ids Many2many → product.attribute.value
    domain="[('id', 'in', available_attribute_value_ids)]" string='Attributes' args: 'product.attribute.value'
  • available_attribute_value_ids Many2many → product.attribute.value
    compute='_compute_available_attribute' string='Available Attributes' args: 'product.attribute.value'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' required=True args: 'product.template'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'product')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (4)
  • main_image_id Many2one → storage.image
    compute='_compute_main_image_id' store=True args: 'storage.image'
  • variant_image_ids Many2many → product.image.relation
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'product.image.relation'
  • variant_image_medium_url Char
    related='main_image_id.image_medium_url' string='Variant main medium image URL'
  • variant_image_small_url Char
    related='main_image_id.image_small_url' string='Variant main small image URL'
Public methods (0)

No public methods.

New fields (4)
  • image_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='product_tmpl_id' string='Images'
  • image_medium_url Char
    related='main_image_id.image_medium_url' string='Main medium image URL'
  • image_small_url Char
    related='main_image_id.image_small_url' string='Main small image URL'
  • main_image_id Many2one → storage.image
    comodel_name='storage.image' compute='_compute_main_image_id' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)

New fields (2)
  • category_relation_ids One2many → category.image.relation
    inverse_name='image_id' string='Categories' args: 'category.image.relation'
  • product_relation_ids One2many → product.image.relation
    inverse_name='image_id' string='Products' args: 'product.image.relation'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/18.0/storage_image_product
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYStorage
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, Simone Orsi, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/server-env:
    - server_environment
OCA/storage:
    - storage_image
    - storage_thumbnail
    - storage_file
    - storage_backend
odoo/odoo:
    - base
    - base_sparse_field
    - product
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - sale
    - sales_team
    - account_payment
    - account
    - onboarding
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python_slugify
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Attach images to products and categories

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
image_tag_view_form image.tag form New
image_tag_view_search image.tag search New
image_tag_view_tree image.tag list New
product_category_form_view product.category xpath Inherits product.product_category_form_view
product_category_image_relation_form category.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_category_image_relation_kanban category.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_image_relation_form product.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_image_relation_kanban product.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_kanban_view product.product field Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template field Inherits product.product_template_kanban_view
product_template_only_form_view product.template field Inherits product.product_template_only_form_view
product_variant_easy_edit_view product.product field Inherits product.product_variant_easy_edit_view
storage_image_view_form storage.image page Inherits storage_image.storage_image_view_form
Models touched (8)

New fields (2)
  • category_id Many2one → product.category
    index=True ondelete='cascade' required=True args: 'product.category'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'category')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (6)
  • apply_on Selection
    default=<expr> selection=[('product', 'Product'), ('category', 'Category')]
  • categ_img_rel_ids One2many → category.image.relation
    comodel_name='category.image.relation' inverse_name='tag_id' string='Category Image Relations'
  • name Char
    required=True
  • product_categ_count Integer
    compute='_compute_product_categ_count' string='# of Categories'
  • product_img_rel_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='tag_id' string='Product Image Relations'
  • product_tmpl_count Integer
    compute='_compute_product_tmpl_count' string='# of Products'
Public methods (2)
  • action_open_product_categories(self)
  • action_open_product_templates(self)

New fields (1)
  • image_ids One2many → category.image.relation
    inverse_name='category_id' args: 'category.image.relation'
Public methods (0)

No public methods.

New fields (4)
  • attribute_value_ids Many2many → product.attribute.value
    domain="[('id', 'in', available_attribute_value_ids)]" string='Attributes' args: 'product.attribute.value'
  • available_attribute_value_ids Many2many → product.attribute.value
    compute='_compute_available_attribute' string='Available Attributes' args: 'product.attribute.value'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' required=True args: 'product.template'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'product')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (4)
  • main_image_id Many2one → storage.image
    compute='_compute_main_image_id' store=True args: 'storage.image'
  • variant_image_ids Many2many → product.image.relation
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'product.image.relation'
  • variant_image_medium_url Char
    related='main_image_id.image_medium_url' string='Variant main medium image URL'
  • variant_image_small_url Char
    related='main_image_id.image_small_url' string='Variant main small image URL'
Public methods (0)

No public methods.

New fields (4)
  • image_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='product_tmpl_id' string='Images'
  • image_medium_url Char
    related='main_image_id.image_medium_url' string='Main medium image URL'
  • image_small_url Char
    related='main_image_id.image_small_url' string='Main small image URL'
  • main_image_id Many2one → storage.image
    comodel_name='storage.image' compute='_compute_main_image_id' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)

New fields (2)
  • category_relation_ids One2many → category.image.relation
    inverse_name='image_id' string='Categories' args: 'category.image.relation'
  • product_relation_ids One2many → product.image.relation
    inverse_name='image_id' string='Products' args: 'product.image.relation'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/15.0/storage_image_product
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYStorage
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSMiquel Raïch, JordiMForgeFlow, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:37
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/server-env:
    - server_environment
OCA/storage:
    - storage_image
    - storage_thumbnail
    - storage_file
    - storage_backend
odoo/odoo:
    - base
    - base_sparse_field
    - product
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - sale
    - sales_team
    - payment
    - account
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python_slugify
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
image_tag_view_form image.tag form New
image_tag_view_search image.tag search New
image_tag_view_tree image.tag tree New
product_category_form_view product.category xpath Inherits product.product_category_form_view
product_category_image_relation_form category.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_category_image_relation_kanban category.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_image_relation_form product.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_image_relation_kanban product.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_kanban_view product.product field Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template field Inherits product.product_template_kanban_view
product_template_only_form_view product.template field Inherits product.product_template_only_form_view
product_variant_easy_edit_view product.product field Inherits product.product_variant_easy_edit_view
storage_image_view_form storage.image page Inherits storage_image.storage_image_view_form
Models touched (8)

New fields (2)
  • category_id Many2one → product.category
    index=True ondelete='cascade' required=True args: 'product.category'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'category')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (6)
  • apply_on Selection
    default=<expr> selection=[('product', 'Product'), ('category', 'Category')]
  • categ_img_rel_ids One2many → category.image.relation
    comodel_name='category.image.relation' inverse_name='tag_id' readonly=True string='Category Image Relations'
  • name Char
    required=True
  • product_categ_count Integer
    compute='_compute_product_categ_count' string='# of Categories'
  • product_img_rel_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='tag_id' readonly=True string='Product Image Relations'
  • product_tmpl_count Integer
    compute='_compute_product_tmpl_count' string='# of Products'
Public methods (2)
  • action_open_product_categories(self)
  • action_open_product_templates(self)

New fields (1)
  • image_ids One2many → category.image.relation
    inverse_name='category_id' args: 'category.image.relation'
Public methods (0)

No public methods.

New fields (4)
  • attribute_value_ids Many2many → product.attribute.value
    domain="[('id', 'in', available_attribute_value_ids)]" string='Attributes' args: 'product.attribute.value'
  • available_attribute_value_ids Many2many → product.attribute.value
    compute='_compute_available_attribute' string='Available Attributes' args: 'product.attribute.value'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' required=True args: 'product.template'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'product')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (4)
  • main_image_id Many2one → storage.image
    compute='_compute_main_image_id' store=True args: 'storage.image'
  • variant_image_ids Many2many → product.image.relation
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'product.image.relation'
  • variant_image_medium_url Char
    related='main_image_id.image_medium_url' string='Variant main medium image URL'
  • variant_image_small_url Char
    related='main_image_id.image_small_url' string='Variant main small image URL'
Public methods (0)

No public methods.

New fields (4)
  • image_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='product_tmpl_id' string='Images'
  • image_medium_url Char
    related='main_image_id.image_medium_url' string='Main medium image URL'
  • image_small_url Char
    related='main_image_id.image_small_url' string='Main small image URL'
  • main_image_id Many2one → storage.image
    comodel_name='storage.image' compute='_compute_main_image_id' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)

New fields (2)
  • category_relation_ids One2many → category.image.relation
    inverse_name='image_id' string='Categories' args: 'category.image.relation'
  • product_relation_ids One2many → product.image.relation
    inverse_name='image_id' string='Products' args: 'product.image.relation'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/14.0/storage_image_product
VERSION
VERSION 3.5.2
CATEGORY
CATEGORYStorage
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSEnric Tobella, Ivàn Todorovich, Miquel Raïch, JordiMForgeFlow, Sébastien BEAU, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Pierrick Brun, oca-ci, Hai Lang
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/server-env:
    - server_environment
OCA/storage:
    - storage_image
    - storage_thumbnail
    - storage_file
    - storage_backend
odoo/odoo:
    - base
    - base_sparse_field
    - product
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - sale
    - sales_team
    - payment
    - account
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python_slugify
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
image_tag_view_form image.tag form New
image_tag_view_search image.tag search New
image_tag_view_tree image.tag tree New
product_category_form_view product.category xpath Inherits product.product_category_form_view
product_category_image_relation_form category.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_category_image_relation_kanban category.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_image_relation_form product.image.relation group Inherits storage_image.view_storage_image_abstract_form
product_image_relation_kanban product.image.relation kanban Inherits storage_image.view_storage_image_abstract_kanban
product_kanban_view product.product field Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template field Inherits product.product_template_kanban_view
product_template_only_form_view product.template field Inherits product.product_template_only_form_view
product_variant_easy_edit_view product.product field Inherits product.product_variant_easy_edit_view
storage_image_view_form storage.image page Inherits storage_image.storage_image_view_form
Models touched (8)

New fields (2)
  • category_id Many2one → product.category
    index=True ondelete='cascade' required=True args: 'product.category'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'category')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (6)
  • apply_on Selection
    default=<expr> selection=[('product', 'Product'), ('category', 'Category')]
  • categ_img_rel_ids One2many → category.image.relation
    comodel_name='category.image.relation' inverse_name='tag_id' readonly=True string='Category Image Relations'
  • name Char
    required=True
  • product_categ_count Integer
    compute='_compute_product_categ_count' string='# of Categories'
  • product_img_rel_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='tag_id' readonly=True string='Product Image Relations'
  • product_tmpl_count Integer
    compute='_compute_product_tmpl_count' string='# of Products'
Public methods (2)
  • action_open_product_categories(self)
  • action_open_product_templates(self)

New fields (1)
  • image_ids One2many → category.image.relation
    inverse_name='category_id' args: 'category.image.relation'
Public methods (0)

No public methods.

New fields (4)
  • attribute_value_ids Many2many → product.attribute.value
    domain="[('id', 'in', available_attribute_value_ids)]" string='Attributes' args: 'product.attribute.value'
  • available_attribute_value_ids Many2many → product.attribute.value
    compute='_compute_available_attribute' string='Available Attributes' args: 'product.attribute.value'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' required=True args: 'product.template'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'product')] index=True string='Tag' args: 'image.tag'
Public methods (0)

No public methods.

New fields (4)
  • main_image_id Many2one → storage.image
    compute='_compute_main_image_id' store=True args: 'storage.image'
  • variant_image_ids Many2many → product.image.relation
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'product.image.relation'
  • variant_image_medium_url Char
    related='main_image_id.image_medium_url' string='Variant main medium image URL'
  • variant_image_small_url Char
    related='main_image_id.image_small_url' string='Variant main small image URL'
Public methods (0)

No public methods.

New fields (4)
  • image_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='product_tmpl_id' string='Images'
  • image_medium_url Char
    related='main_image_id.image_medium_url' string='Main medium image URL'
  • image_small_url Char
    related='main_image_id.image_small_url' string='Main small image URL'
  • main_image_id Many2one → storage.image
    comodel_name='storage.image' compute='_compute_main_image_id' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)

New fields (2)
  • category_relation_ids One2many → category.image.relation
    inverse_name='image_id' string='Categories' args: 'category.image.relation'
  • product_relation_ids One2many → product.image.relation
    inverse_name='image_id' string='Products' args: 'product.image.relation'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/13.0/storage_image_product
VERSION
VERSION 3.0.2
CATEGORY
CATEGORYStorage
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSStéphane Bidoul, Laurent Mignon (ACSONE), mreficent, Enric Tobella, Jordi Ballester, Miquel Raïch, JordiMForgeFlow, AaronHForgeFlow, Sébastien BEAU, oca-travis, OCA-git-bot, Simone Orsi, Quentin Groulard, Héctor Villarreal Ortega
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/server-env:
    - server_environment
OCA/storage:
    - storage_image
    - storage_thumbnail
    - storage_file
    - storage_backend
odoo/odoo:
    - base
    - base_sparse_field
    - product
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - sale
    - sales_team
    - payment
    - account
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python_slugify
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
image_tag_view_form image.tag form New
image_tag_view_search image.tag search New
image_tag_view_tree image.tag tree New
product_category_form_view product.category xpath Inherits product.product_category_form_view
product_category_image_relation_form category.image.relation form New
product_category_image_relation_kanban category.image.relation kanban New
product_image_relation_form product.image.relation form New
product_image_relation_kanban product.image.relation kanban New
product_kanban_view product.product field Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template field Inherits product.product_template_kanban_view
product_template_only_form_view product.template field Inherits product.product_template_only_form_view
product_variant_easy_edit_view product.product field Inherits product.product_variant_easy_edit_view
storage_image_view_form storage.image page Inherits storage_image.storage_image_view_form
Models touched (9)

New fields (2)
  • category_id Many2one → product.category
    args: 'product.category'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'category')] args: 'image.tag'
Public methods (0)

No public methods.

New fields (6)
  • apply_on Selection
    default=<expr> selection=[('product', 'Product'), ('category', 'Category')]
  • categ_img_rel_ids One2many → category.image.relation
    comodel_name='category.image.relation' inverse_name='tag_id' readonly=True string='Category Image Relations'
  • name Char
  • product_categ_count Integer
    compute='_compute_product_categ_count' string='# of Categories'
  • product_img_rel_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='tag_id' readonly=True string='Product Image Relations'
  • product_tmpl_count Integer
    compute='_compute_product_tmpl_count' string='# of Products'
Public methods (2)
  • action_open_product_categories(self)
  • action_open_product_templates(self)

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • image_ids One2many → category.image.relation
    inverse_name='category_id' args: 'category.image.relation'
Public methods (0)

No public methods.

New fields (4)
  • attribute_value_ids Many2many → product.attribute.value
    domain="[('id', 'in', available_attribute_value_ids)]" string='Attributes' args: 'product.attribute.value'
  • available_attribute_value_ids Many2many → product.attribute.value
    compute='_compute_available_attribute' string='Available Attributes' args: 'product.attribute.value'
  • product_tmpl_id Many2one → product.template
    args: 'product.template'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'product')] args: 'image.tag'
Public methods (0)

No public methods.

New fields (4)
  • main_image_id Many2one → storage.image
    compute='_compute_main_image_id' store=True args: 'storage.image'
  • variant_image_ids Many2many → product.image.relation
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'product.image.relation'
  • variant_image_medium_url Char
    related='main_image_id.image_medium_url' string='Variant main medium image URL'
  • variant_image_small_url Char
    related='main_image_id.image_small_url' string='Variant main small image URL'
Public methods (0)

No public methods.

New fields (4)
  • image_ids One2many → product.image.relation
    comodel_name='product.image.relation' inverse_name='product_tmpl_id' string='Images'
  • image_medium_url Char
    related='main_image_id.image_medium_url' string='Main medium image URL'
  • image_small_url Char
    related='main_image_id.image_small_url' string='Main small image URL'
  • main_image_id Many2one → storage.image
    comodel_name='storage.image' compute='_compute_main_image_id' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)

New fields (2)
  • category_relation_ids One2many → category.image.relation
    inverse_name='image_id' string='Categories' args: 'category.image.relation'
  • product_relation_ids One2many → product.image.relation
    inverse_name='image_id' string='Products' args: 'product.image.relation'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/12.0/storage_image_product
VERSION
VERSION 1.2.2
CATEGORY
CATEGORYStorage
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSStéphane Bidoul, GitHub, Laurent Mignon (ACSONE), Denis Roussel, Stéphane Bidoul (ACSONE), Sebastien Beau, Thomas Binsfeld, Sébastien BEAU, oca-travis, OCA-git-bot, Tom Blauwendraat, Quentin Groulard
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/server-env:
    - server_environment
OCA/storage:
    - storage_image
    - storage_thumbnail
    - storage_file
    - storage_backend
odoo/odoo:
    - base
    - base_sparse_field
    - product
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - sale
    - sales_team
    - payment
    - account
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES slugify
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
image_tag_view_search image.tag search New
image_tag_view_tree image.tag tree New
product_category_form_view product.category xpath Inherits product.product_category_form_view
product_category_image_relation_form category.image.relation form New
product_category_image_relation_kanban category.image.relation kanban New
product_image_relation_form product.image.relation form New
product_image_relation_kanban product.image.relation kanban New
product_kanban_view product.product field Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template field Inherits product.product_template_kanban_view
product_template_only_form_view product.template field Inherits product.product_template_only_form_view
product_variant_easy_edit_view product.product field Inherits product.product_variant_easy_edit_view
storage_image_view_form storage.image page Inherits storage_image.storage_image_view_form
Models touched (8)

New fields (2)
  • category_id Many2one → product.category
    args: 'product.category'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'category')] args: 'image.tag'
Public methods (0)

No public methods.

New fields (2)
  • apply_on Selection
    default=<expr> selection=[('product', 'Product'), ('category', 'Category')]
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • image_ids One2many → category.image.relation
    inverse_name='category_id' args: 'category.image.relation'
Public methods (0)

No public methods.

New fields (4)
  • attribute_value_ids Many2many → product.attribute.value
    string='Attributes' args: 'product.attribute.value'
  • available_attribute_value_ids Many2many → product.attribute.value
    compute='_compute_available_attribute' string='Available Attributes' args: 'product.attribute.value'
  • product_tmpl_id Many2one → product.template
    args: 'product.template'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'product')] args: 'image.tag'
Public methods (0)

No public methods.

New fields (3)
  • variant_image_ids Many2many → product.image.relation
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'product.image.relation'
  • variant_image_medium_url Char
    related='variant_image_ids.image_id.image_medium_url' store=True string='Variant Image Medium Url'
  • variant_image_small_url Char
    related='variant_image_ids.image_id.image_small_url' store=True string='Variant Image Small Url'
Public methods (0)

No public methods.

New fields (3)
  • image_ids One2many → product.image.relation
    inverse_name='product_tmpl_id' string='Images' args: 'product.image.relation'
  • image_medium_url Char
    related='image_ids.image_id.image_medium_url' store=True
  • image_small_url Char
    related='image_ids.image_id.image_small_url' store=True
Public methods (0)

No public methods.

New fields (2)
  • category_relation_ids One2many → category.image.relation
    inverse_name='image_id' string='Categories' args: 'category.image.relation'
  • product_relation_ids One2many → product.image.relation
    inverse_name='image_id' string='Products' args: 'product.image.relation'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/10.0/storage_image_product
VERSION
VERSION 2.2.1
CATEGORY
CATEGORYStorage
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSStéphane Bidoul, Alexis de Lattre, GitHub, Laurent Mignon (ACSONE), Denis Roussel, Sébastien BEAU, oca-travis, OCA-git-bot, Benoit, Pierrick Brun, François Honoré, Quentin Groulard
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/server-tools:
    - keychain
OCA/storage:
    - storage_image
    - storage_thumbnail
    - storage_file
    - storage_backend
OCA/web:
    - web_tree_image
odoo/odoo:
    - base
    - base_setup
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - sale
    - sales_team
    - account
    - analytic
    - web_planner
    - procurement
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES slugify
cryptography
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
image_tag_view_search image.tag search New
image_tag_view_tree image.tag tree New
product_category_form_view product.category xpath Inherits product.product_category_form_view
product_category_image_relation_form category.image.relation form New
product_category_image_relation_kanban category.image.relation kanban New
product_category_image_relation_tree category.image.relation tree New
product_image_relation_form product.image.relation form New
product_image_relation_kanban product.image.relation kanban New
product_image_relation_tree product.image.relation tree New
product_kanban_view product.product field Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template field Inherits product.product_template_kanban_view
product_template_only_form_view product.template field Inherits product.product_template_only_form_view
product_variant_easy_edit_view product.product field Inherits product.product_variant_easy_edit_view
Models touched (7)

New fields (2)
  • category_id Many2one → product.category
    args: 'product.category'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'category')] args: 'image.tag'
Public methods (0)

No public methods.

New fields (2)
  • apply_on Selection
    selection=[('product', 'Product'), ('category', 'Category')]
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • image_ids One2many → category.image.relation
    inverse_name='category_id' args: 'category.image.relation'
Public methods (0)

No public methods.

New fields (4)
  • attribute_value_ids Many2many → product.attribute.value
    string='Attributes' args: 'product.attribute.value'
  • available_attribute_value_ids Many2many → product.attribute.value
    compute='_compute_available_attribute' string='Attributes' args: 'product.attribute.value'
  • product_tmpl_id Many2one → product.template
    args: 'product.template'
  • tag_id Many2one → image.tag
    domain=[('apply_on', '=', 'product')] args: 'image.tag'
Public methods (0)

No public methods.

New fields (3)
  • variant_image_ids Many2many → product.image.relation
    compute='_compute_variant_image_ids' store=True args: 'product.image.relation'
  • variant_image_medium_url Char
    related='variant_image_ids.image_id.image_medium_url' store=True
  • variant_image_small_url Char
    related='variant_image_ids.image_id.image_small_url' store=True
Public methods (0)

No public methods.

New fields (3)
  • image_ids One2many → product.image.relation
    inverse_name='product_tmpl_id' args: 'product.image.relation'
  • image_medium_url Char
    related='image_ids.image_id.image_medium_url' store=True
  • image_small_url Char
    related='image_ids.image_id.image_small_url' store=True
Public methods (0)

No public methods.