This question has been flagged
5 Replies
8549 Views

Hi,

I created a custom field name x_cmdtycd in 'product.template' model.

Now I'm trying to display this custom field in Order Lines tab of new Quotation view, between Product and Description columns.

Here is my code on 'sale.order.form' view

<page string="Order Lines" name="order_lines">
<field
name="order_line"
widget="section_and_note_one2many"
mode="tree,kanban"
attrs="{'readonly': [('state', 'in', ('done','cancel'))]}"
>
<form>
<field name="display_type" invisible="1"/>
<!--
We need the sequence field to be here for new lines to be added at the correct position.
TODO: at some point we want to fix this in the framework so that an invisible field is not required.
-->
<field name="sequence" invisible="1"/>
<group>
<group attrs="{'invisible': [('display_type', '!=', False)]}">
<field name="product_updatable" invisible="1"/>
<field name="product_id"
context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom, 'company_id': parent.company_id}"
attrs="{
'readonly': [('product_updatable', '=', False)],
'required': [('display_type', '=', False)],
}"
force_save="1"
/>
<field name="product_id.x_cmdtycd"/>
<field name="invoice_status" invisible="1"/>
<field name="qty_to_invoice" invisible="1"/>
<field name="qty_delivered_manual" invisible="1"/>
<field name="qty_delivered_method" invisible="1"/>
<field name="price_total" invisible="1"/>
<field name="price_tax" invisible="1"/>
<field name="price_subtotal" invisible="1"/>
<label for="product_uom_qty" string="Ordered Quantity"/>

And it show the error is

Field `product_id.x_cmdtycd` does not exist

Thank you for any help!

Avatar
Discard
Best Answer
Hi,
x_cmdtycd is the field which you are created in product.template.

Sale form view is connected to the sale.order.line table.

So to get the x_cmdtycd  field in this form view it is required to set a related field in the sale.order.line to get the fields from product.template

Pls use the below code
product_template_id = fields.Many2one('product.template')
in the python code, then you can access it by
product_id.product_template_id.x_cmdtycd
instead of product_id.x_cmdtycd
Avatar
Discard
Author

Does it work when create these fields on UI?

I tried with following steps:

1. Create x_code field (Field Name = x_code; Field Type = char) in product.template model

2. Then create x_product_template_id field (Field Name = x_product_template_id; Field Type = many2one; Object Relation = product.template; On delete = Cascade)

3. Add <field name="product_id.x_product_template_id.x_code"/> to Sale Order Lines view

However, I still got this below error when click button Save.

Error while validating constraint

Field `product_id.x_product_template_id.x_code` does not exist

Error context:

View `sale.order.form`

[view_id: 666, xml_id: sale.view_order_form, model: sale.order, parent_id: n/a]

Author

Sorry, the field in step 2 was created in sale.order.line model

Author

I tried several ways however it didn't work.

Basically, we cannot use "." in <field> tag in view I think.

It seems have no solution for my problem :(

Author Best Answer

I found the solution to add new custom field of 'product.template' model to sale.order.line view using related field

Here is my solution

class ProductTemplate(models.Model):
_inherit = 'product.template'

cm_code = fields.Char('Common Code', store=True)


class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'

product_cm_code = fields.Char('Common Code', related='product_id.cm_code', store=True)


<record model="ir.ui.view" id="sale_order_line_view_inherit">
<field name="name">sale.order.line.view.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='order_line']/tree/field[@name='product_id']" position="after">
<field name="product_cm_code"/>
</xpath>
</field>
</record>


Avatar
Discard