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

Here is my situation:

I have a page inside notebook which is "Product Info". Inside this page, I have added two fields : product_id, product_image. So whenever I select a product, it will automatically show relevant image of that product. I have done this with this code:


from odoo import models, fields, api

class CrmLead(models.Model):

    _inherit = 'crm.lead'

    product_id = fields.Many2one('product.product', string="Product")

    product_image = fields.Binary(string='Custom Design',related='product_id.product_image', store=True)

class ProductImage(models.Model):

    _inherit = 'product.product'

    _description = 'Product Image'

    product_image = fields.Binary(string='Custom Design')


But now, I want to this product_id field as a one2many relation type with product.product alongside with product_image and attachment file field similar like order_line so that I can select as much product as I want . I have tried several ways but went in vein. So what I need to do to achieve that requirement? 


Avatar
Discard
Best Answer

You can simply create a one2many field relational to a new model, where those two fields are or relate it directly to the product.product model where the image field is also located, the only thing you need in the view is to use the tree attribute just like It is used in the sales lines to show those two fields with the one2many widget.

Avatar
Discard
Author

It works! Thank you. But now, its not showing my existing product but want me to create new one which I dont want. I want to select my existing product. If I need to create one, i will do it in product.product model as usual rule. Can you suggest me what I need to do?
here my code:
.py:
from odoo import models, fields, api
class CrmLead(models.Model):
_inherit = 'crm.lead'
product_ids = fields.One2many('product.product', 'crm_lead_id', string='Products')
class ProductProduct(models.Model):
_inherit = 'product.product'
crm_lead_id = fields.Many2one('crm.lead', string='CRM Lead')
product_image = fields.Binary(string='Product Image')

.xml:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="wise_crm_lead_view_form_inherit" model="ir.ui.view">
<field name="name">techtrioz.crm.lead.form.inherit</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_lead_view_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='internal_notes']" position='after'>
<page string="Product Info" name="product_info">
<tree position="inside">
<field name="product_ids" widget="one2many_list">
<tree>
<field name="default_code"/>
<field name="product_image"/>
</tree>
</field>
</tree>
</page>
</xpath>
</field>
</record>
</odoo>

In that case it is better that you use a many2many relationship to be able to select already existing products, in the view you can still use the one2many widget even if the field is many2many

Related Posts Replies Views Activity
1
Jan 24
1076
1
Jan 24
1374
2
Jan 24
1205
1
May 25
993
0
May 25
589