Samuel Lopez
Samuel Lopez

Reputation: 87

Odoo 10 XMLRPC How to map one2many and many2one

I have recently been doing some development in python 2.7 with Odoo 10 API using XMLRPC. My questions are:

  1. How do I write a one2many field to a field in odoo via xmlrpc

  2. How do u write a many2one field to a field in odoo via xmlrpc

Many thanks your help is much appreciated!

Samuel

Upvotes: 1

Views: 3517

Answers (2)

Vibha Kachhela
Vibha Kachhela

Reputation: 194

Create Activity (One2many field) in CRM form using Php API In @v11 Odoo Community:

$opportunity_id = 13; (Lead in which you create activity) 

$user_id = 1; (User, for whom you assign task) 

$c = $_POST["loading_time"]; (Deadline date which you have to set from php)

$enddate = date("Y-m-d H-i-s", strtotime($c));

$model = 'crm.lead';

$res_model_id = $models -> execute_kw($db, $uid, $password,
   'ir.model', 'search', array(array(array('model', '=', 'crm.lead'))));
print_r($res_model_id);

$activity_type_id = $models -> execute_kw($db, $uid, $password,
   'mail.activity.type', 'search', array(array(array('name', '=', 'Todo'))));   (this is activity type like Todo,Call,Email,etc....)
print_r($activity_type_id);

$product_attribute_line = $models -> execute($db, $uid, $password,
                                       'mail.activity', 'create',
                                        array('model'= > $model,
            'res_id'= > $opportunity_id,
            'note'= > $_POST["question"],
            'user_id'= > $user_id,
            'date_deadline'=> $_POST["loading_time"],
            'res_model_id'= > $res_model_id[0],
            'summary'= > $_POST["subject"],
            'activity_type_id'= > $activity_type_id[0],
            'activity_ids'= > array(array(6, 0, array($opportunity_id))) ));

(activity_ids is a one2many field which will create activity)

Important: To Create One2many field You must have to pass related many2one Id

You can see in image also by refer following image: enter image description here

Upvotes: 0

CZoellner
CZoellner

Reputation: 14801

For Many2one fields you can simply use the ID of the record:

my_partner_id = 1  # or use a search to find the correct one
id = models.execute_kw(db, uid, password, 'sale.order', 'create', [{
    'partner_id': my_partner_id,
}])

Many2many or One2many fields are a bit special. There are some magic triplets in Odoo, you have to use with such fields -> Model Reference/CRUD/write(vals).

For example if you want to add a tag to a customer (Many2many field):

my_tag_id = 42  # or use a search to find the correct one
id = models.execute_kw(db, uid, password, 'res.partner', 'write',
    [my_partner_id], [{
    'category_id': [(4, my_tag_id)],
}])

Or if you want to delete all tags:

my_tag_id = 42  # or use a search to find the correct one
id = models.execute_kw(db, uid, password, 'res.partner', 'write',
    [my_partner_id], [{
    'category_id': [(5,)],
}])

Or if you want to substitute all tags by some others:

my_tag_id1 = 42  # or use a search to find the correct one
my_tag_id2 = 7  # or use a search to find the correct one
id = models.execute_kw(db, uid, password, 'res.partner', 'write',
    [my_partner_id], [{
    'category_id': [(6, None, [my_tag_id1, my_tag_id2])],
}])

Upvotes: 4

Related Questions