Fs Product Multi Image

fs_product_multi_image
REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/17.0/fs_product_multi_image
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSDaniel Reis, Weblate, OCA-git-bot, oca-ci, JasminSForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-env:
    - server_environment
OCA/storage:
    - fs_base_multi_image
    - fs_image
    - fs_file
    - fs_attachment
    - fs_storage
    - image_tag
odoo/odoo:
    - base
    - base_sparse_field
    - web
    - product
    - mail
    - base_setup
    - bus
    - web_tour
    - uom
    - sales_team
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES fsspec>=2025.3.0
python_slugify
fsspec>=2024.5.0
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Attach images to products and categories and store them on an external
filesystem instead of the database.

This addon is a drop-in replacement for the **storage_image_product**
addon.

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
fs_product_category_image_form_view product.category.fs.image.form fs.product.category.image group Inherits fs_base_multi_image.fs_image_relation_mixin_form_view
fs_product_image_form_view fs.product.image.form fs.product.image group Inherits fs_base_multi_image.fs_image_relation_mixin_form_view
fs_product_image_kanban_view fs.product.image.kanban fs.product.image xpath Inherits fs_base_multi_image.fs_image_relation_mixin_kanban_view
product_category_form_view product.category.form product.category div Inherits product.product_category_form_view
product_kanban_view product.product xpath Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template xpath 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)
  • product_categ_id Many2one → product.category
    comodel_name='product.category' index=True ondelete='cascade' string='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 (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
    comodel_name='product.template' index=True ondelete='cascade' string='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 (1)
  • apply_on Selection
    ondelete={'product': 'cascade', 'category': 'cascade'} selection_add=[('product', 'Product'), ('category', 'Category')]
Public methods (0)

No public methods.

New fields (1)
  • image_ids One2many → fs.product.category.image
    comodel_name='fs.product.category.image' inverse_name='product_categ_id' string='Images'
Public methods (0)

No public methods.

New fields (2)
  • main_image_id Many2one → fs.product.image
    comodel_name='fs.product.image' compute='_compute_main_image_id' store=True string='Main Image'
  • variant_image_ids Many2many → fs.product.image
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'fs.product.image'
Public methods (0)

No public methods.

New fields (2)
  • image_ids One2many → fs.product.image
    comodel_name='fs.product.image' inverse_name='product_tmpl_id' string='Images'
  • main_image_id Many2one → fs.product.image
    comodel_name='fs.product.image' compute='_compute_main_image_id' store=True string='Main Image'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)
REPOSITORY
REPOSITORYOCA/storage
GIT
GIThttps://github.com/OCA/storage.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/storage/tree/16.0/fs_product_multi_image
VERSION
VERSION 1.1.6
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSLaurent Mignon (ACSONE), Denis Roussel, Weblate, OCA-git-bot, Benjamin Willig, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/storage
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:52
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-env:
    - server_environment
OCA/storage:
    - fs_base_multi_image
    - fs_image
    - fs_file
    - fs_attachment
    - fs_storage
    - image_tag
odoo/odoo:
    - base
    - base_sparse_field
    - product
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - sales_team
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES fsspec>=2025.3.0
python_slugify
fsspec>=2024.5.0
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
fs_product_category_image_form_view product.category.fs.image.form fs.product.category.image group Inherits fs_base_multi_image.fs_image_relation_mixin_form_view
fs_product_category_image_kanban_view fs.product.category.image.kanban fs.product.category.image xpath Inherits fs_base_multi_image.fs_image_relation_mixin_kanban_view
fs_product_image_form_view fs.product.image.form fs.product.image group Inherits fs_base_multi_image.fs_image_relation_mixin_form_view
fs_product_image_kanban_view fs.product.image.kanban fs.product.image xpath Inherits fs_base_multi_image.fs_image_relation_mixin_kanban_view
product_category_form_view product.category.form product.category div Inherits product.product_category_form_view
product_kanban_view product.product xpath Inherits product.product_kanban_view
product_normal_form_view product.product field Inherits product.product_normal_form_view
product_template_kanban_view product.template xpath 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)
  • product_categ_id Many2one → product.category
    comodel_name='product.category' index=True ondelete='cascade' string='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 (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
    comodel_name='product.template' index=True ondelete='cascade' string='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 (1)
  • apply_on Selection
    ondelete={'product': 'cascade', 'category': 'cascade'} selection_add=[('product', 'Product'), ('category', 'Category')]
Public methods (0)

No public methods.

New fields (1)
  • image_ids One2many → fs.product.category.image
    comodel_name='fs.product.category.image' inverse_name='product_categ_id' string='Images'
Public methods (0)

No public methods.

New fields (2)
  • main_image_id Many2one → fs.product.image
    comodel_name='fs.product.image' compute='_compute_main_image_id' store=True string='Main Image'
  • variant_image_ids Many2many → fs.product.image
    compute='_compute_variant_image_ids' store=True string='Variant Images' args: 'fs.product.image'
Public methods (0)

No public methods.

New fields (2)
  • image_ids One2many → fs.product.image
    comodel_name='fs.product.image' inverse_name='product_tmpl_id' string='Images'
  • main_image_id Many2one → fs.product.image
    comodel_name='fs.product.image' compute='_compute_main_image_id' store=True string='Main Image'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)