Přejít na obsah
Menu
You need to be registered to interact with the community.
This question has been flagged
5 Odpovědi
10544 Zobrazení

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
Zrušit
Nejlepší odpověď
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
Zrušit
Autor

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]

Autor

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

Autor

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 :(

Autor Nejlepší odpověď

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
Zrušit