One2many And Many 2one In Odoo 14
One2many in odoo
These are just mappings, You will mostly find them on any framework which uses a relational database. One2Many: Object A can have one or many of objects B (E.g A person can have many cars). Relationship: A -> B = One -> Many = One2Many.

Now we can add a One2many fields in our enzapps.estimate model
step 1:
You can create a field with type One2many under your class ,and here we need another class for one manyfields declaration.
syntax as follows:
<field name> = fields.One2many(comodel='<comodel name>’,'<child_Model_name>’, ‘connector_field_id)
python code:
from odoo import models, fields
Here we can create another class for one2many
class ChildModel(models.Model):
_name = ‘child.model’
connecting_field_id = fields.Many2one(‘parent.model’, string=”Connector”)
child_field_1 = fields.Char(string=”Child Field 1″)
child_field_2 = fields.Integer(string=”Child Field 2″)
Note: Here we need one Many2one field to connect with our parent class
in practical case:
from odoo import models,fields,api
class EnzappasEstimate(models.Model):
_name='enzapps.estimate'
p_type = fields.Many2one('res.partner')
location = fields.Char()
address = fields.Text()
furnishing = fields.Selection(selection=[('yes', 'YES'), ('no', 'NO')])
expected_date = fields.Date()
created_date = fields.Datetime()
currency = fields.Selection(selection=[('usd', 'USD'), ('inr', 'INR')])
area_of_building = fields.Float()
budget = fields.Integer()
order_lines = fields.One2many('enzapps.estimate.line', 'connection')
class enzappsEstimateLineLines(models.Model):
_name = 'enzapps.estimate.line'
connection = fields.Many2one('enzapps.estimate')
product_id = fields.Many2one('product.product', 'Product')
quantity = fields.Float()
unit_price = fields.Float()
total_price = fields.Float()
# price_subtotal = fields.Monetary()
@api.onchange('quantity', 'unit_price')
def total(self):
self.total_price = self.quantity * self.unit_price
Step 2: Then you can create corresponding xml files with notebook,
syntax as follows:
After closing </group> you can mension this code
<notebook>
<page string="any name you can mension here">
<field name="one2many_field_name">
<tree string="Anything you can add" editable="bottom">
<field name="<field_name>"/>
<field name="<field_name>"/>
</tree>
</field>
</page>
</notebook>
In practical case:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- To show fields-->
<record id="enzapps_contract_tree_view" model="ir.ui.view">
<field name="name">enzapps.estimate</field>
<field name="model">enzapps.estimate</field>
<field name="arch" type="xml">
<tree>
<field name="p_type"/>
<field name="address"/>
<field name="furnishing"/>
<field name="expected_date"/>
<field name="created_date"/>
<field name="location"/>
<field name="currency"/>
<field name="area_of_building"/>
<field name="area_of_building"/>
<field name="budget"/>
</tree>
</field>
</record>
<record id="enzapps_contract_form_id" model="ir.ui.view">
<field name="name">estimate.enzapps.form</field>
<field name="model">enzapps.estimate</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="p_type"/>
<field name="address"/>
<field name="furnishing"/>
<field name="expected_date"/>
<field name="created_date"/>
</group>
<group>
<field name="location"/>
<field name="currency"/>
<field name="area_of_building"/>
<field name="area_of_building"/>
<field name="budget"/>
</group>
</group>
<!-- This for One2many fields-->
<notebook>
<page string="Estimate">
<field name="order_lines">
<tree string="Statement lines" editable="bottom">
<field name="product_id"/>
<field name="quantity"/>
<field name="unit_price"/>
<field name="total_price"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- To show action menu-->
<record id="enzapps_contact_action" model="ir.actions.act_window">
<field name="name">Estimate Order</field>
<field name="res_model">enzapps.estimate</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
No contract available
</p>
</field>
</record>
<!-- To show menu-->
<menuitem id="enzapps_contract"
name="Enzapps Contract"
sequence="1"
action="enzapps_contact_action"/>
</odoo>
Now you can add in manifest file then run the module it shows like this:
MANY2ONE IN ODOO 14
A many2one field is used to link the current object to another object which acts as a parent
for this object. In simple terms, when we can show the records of another model and link it
with the current child model using a many2one relation.
In Our form enzapps.estimate we can add one Many2one field name as amount_payment_term
in py we can add product
amount_payment_term= fields.Many2one('account.payment.term','Amount Payment')
Then you can add in xml file,
syntax as follows:
<record id="enzapps_contract_form_id" model="ir.ui.view">
<field name="name">estimate.enzapps.form</field>
<field name="model">enzapps.estimate</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="amount_payment_term"/>
</group>
</sheet>
</form>
</form>
</record>
The shows like this:
To know more about us