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

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

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.

Autor

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

Nejlepší odpověď

Hi,

Please check with the following code.

<field name="line_ids">
<list name="Lines">
<field name="product_id"/>
</list>
</field>

In Odoo 18 tag <tree> replaced with the  <list>.


Hope it helps

Avatar
Zrušit
Nejlepší odpověď

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
Zrušit
Related Posts Odpovědi Zobrazení Aktivita
0
bře 24
1457
2
lis 16
5663
3
úno 16
16383
1
bře 15
4086
3
bře 15
9145