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

Hey all, writing some Odoo modules to get into module development.

I have a wizard.py​ that specifies:

class MyWizard(models.TransientModel):
    _name = 'my.wizard'
    _description = 'Wizard'
    line_ids = fields.One2many("my.wizard.line", "wizard_id", string="Lines")


And a wizard_line.py​that has:

class MyWizardLine(models.TransientModel):
    _name = 'my.wizard.line'
    _description = 'Wizard Line'
    wizard_id = fields.Many2one('my.wizard', string="Wizard")
    sale_line_id = fields.Many2one('sale.order.line', string="Sale Order Line")
    product_id = fields.Many2one('product.product', string="Product", required=True)

Both are being imported in __init__.py​:

from . import wizard
from . import wizard_line


I have a view under views/wizard_view.xml​:

<odoo>
    <record id="my_wizard_form" model="ir.ui.view">
        <field name="name">my.wizard.form</field>
        <field name="model">my.wizard</field>
        <field name="arch" type="xml">
            <form string="This is a wizard">
                <group>
                    <field name="sale_id" readonly="1"/>
                    <field name="line_ids">
                        <tree>
                            <field name="product_id"/>
                        </tree>
                    </field>
                </group>
                <footer>
                    <button string="Cancel" class="btn-secondary" special="cancel"/>
                </footer>
            </form>
        </field>
    </record>
</odoo>


But this part:

<field name="line_ids">
​<tree>
    ​<field name="product_id"/>
​</tree>
</field>


Throws an error saying:

Field "product_id" does not exist in model "my.wizard"

It appears as if the view is trying to access product_id​ directly on my.wizard​ while it should grab the one that's available through the line_ids​ One2many reference to my.wizard.line​?


Am I doing this wrong?

Avatar
Discard
Author

It does, doesn't it...

However, line_ids is defined as follows in the parent class with name my.wizard​:

line_ids = fields.One2many("my.wizard.line", "wizard_id", string="Lines")

The line model has the name:

_name = 'my.wizard.line'

The view references the parent model:

<field name="model">my.wizard</field>

And subsequently uses line_ids​ correctly:

<field name="line_ids">

I feel like I'm making some obvious logic error here somewhere...

It looks like the error might be related to how the nested class is being referenced in the view. Double-check that the correct model name is used in the record or field tags within the XML. Also, make sure any custom fields in the nested class are properly defined and accessible.

Author

Hi Emad,

Thank you so much! I knew it HAD to be some new tag in Odoo 18 :-)

I can't accept or upvote because I don't have the karma to do so yet. But when I get my 5 karma, I'll revisit, accept and upvote :-)

Best Answer

Hello Cedric

in Odoo 18 the tag 

<tree> 

was replaced with the tag 

<list>

So in your current code Odoo handles the product_id field as if its a field in the model "my.wizard"

if you use the <list> instead of the <tree> it will handle it as a field in the "my.wizard.line"

If this helps please upvote my answer and mark it correct

Avatar
Discard
Related Posts Replies Views Activity
0
Mar 24
1007
2
Nov 16
5240
3
Feb 16
15846
1
Mar 15
3638
3
Mar 15
8666