Hi all, I just started developing Odoo.
My goals are
Add multiple customer product ID to each product, because many clients of mine purchase the same item from me, but they all give it a different name.
Display customer pid in table(column/row) as in each row be like, "Customer Name" | "Customer PID" | "Last update" .
From my understanding, this is done through adding a One2many field in the model 'product.template', so the form view 'product.product_template_only_form_view' can access this field.
I am able to add the desired format of view in my .xml file(mymodule_product_template.xml), and also add the One2many field named 'customer_pid' in my .py code(product.fields.py).
Image link: https://imgur.com/7ub92lb
But when I click on "Add an item", an error occurred.
Odoo Server Error
Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 640, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 677, in dispatch result = self._call_function(**self.params) File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 333, in _call_function return checked_call(self.db, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 101, in wrapper return f(dbname, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 326, in checked_call result = self.endpoint(*a, **kw) File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 935, in __call__ return self.method(*args, **kw) File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 506, in response_wrap response = f(*args, **kw) File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 885, in call_kw return self._call_kw(model, method, args, kwargs) File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 877, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 689, in call_kw return call_kw_multi(method, model, args, kwargs) File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 680, in call_kw_multi result = method(recs, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5456, in onchange record = self.new(values) File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5030, in new record._cache.update(record._convert_to_cache(values, update=True)) File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4909, in _convert_to_cache for name, value in values.iteritems() File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4910, in <dictcomp> if name in fields File "/usr/lib/python2.7/dist-packages/odoo/fields.py", line 1949, in convert_to_cache return process(record.env[self.comodel_name].new(value)._ids) File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5030, in new record._cache.update(record._convert_to_cache(values, update=True)) File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4909, in _convert_to_cache for name, value in values.iteritems() File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4910, in <dictcomp> if name in fields File "/usr/lib/python2.7/dist-packages/odoo/fields.py", line 1780, in convert_to_cache raise ValueError("Wrong value for %s: %r" % (self, value)) ValueError: Wrong value for res.partner.type: u'consu'
I can hit "Ok" to by-pass the error but whatever I enter, it will become public user. Seems like the default value will replace what I fill with this record regardlessly.
Here's my xml code
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record model="ir.ui.view" id="product_description">
<field name="model">product.template</field>
<field name="name">product.template.product.form.mymodule</field>
<field name="inherit_id" ref="product.product_template_only_form_view"></field>
<field name="arch" type="xml"> <!-- Hide Field: Barcode -->
<xpath expr="//field[@name='barcode']" position="replace">
<field name="barcode" invisible="1" modifiers="{'invisible': true}"/>
</xpath>
<!-- Add Feild: Last Update -->
<group name="group_general">
<field name="__last_update" string="Last Update" modifiers="{'readonly': true}"/>
</group>
<!-- Add Customer Product ID table -->
<xpath expr="//group[@name='sale_condition']" position="after">
<separator string="Customer Info" colspan="4"/>
<field name="customer_pid" nolabel="1" modifiers="{}">
<tree>
<field name="name"/>
<field name="pid"/>
<field name="__last_update"/>
</tree>
</field>
</xpath>
<!-- Add Product Description(Specs) & Re-layout -->
<xpath expr="//group[@name='description']" position="replace">
<group name="description">
<separator string="Description for Product" colspan="4"/>
<field name="description" colspan="4" nolabel="1" placeholder="Description of the Prodcut Specification" modifiers="{}"/>
<separator string="Description for Quotations" colspan="4"/>
<field name="description_sale" colspan="4" nolabel="1" placeholder="This note will be displayed on the quotations." modifiers="{}"/>
<separator string="Description for Vendors" colspan="4"/>
<field name="description_purchase" nolabel="1" placeholder="This note will be displayed on requests for quotation." colspan="4" modifiers="{}"/>
<separator string="Description for Pickings" colspan="4"/>
<field name="description_picking" placeholder="Description for Pickings (Rack, Row and Case Information)" nolabel="1" colspan="4" modifiers="{}"/>
</group>
</xpath>
</field>
</record>
</data>
</odoo>
Here's my py code
from odoo import models, fields, api
class ProductTemplateInherited(models.Model):
_inherit = 'product.template'
customer_pid = fields.One2many('product.customerinfo', 'name', string='Customer PID')
class ProductCustomerInfo(models.Model):
_name = 'product.customerinfo'
_description = 'Information about a product customer'
name = fields.Many2one('res.partner', 'Customer', index=True, domain=[('customer', '=', True)], ondelete='restrict', required=True, help='Customer relates to this product')
pid = fields.Char(string='Product ID', required=True)
company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.user.company_id.id, index=1)
Any help is much appreciated, thank you.