Siguiendo con REST y Odoo; como leer, actualizar, crear y borrar con odoo_api

Gustavo Orrillo
- 08/01/2021 - 3 min. de lectura


Este artículo es una continuación sobre como usar el módulo odoo_api. Despues de estar jugando unas pocas horas con el mismo, si tengo que decir porque uno debería usarlo es porque es muy simple de usar. Y muy eficaz al mismo tiempo. Este módulo implementa las operaciones básicas del ORM de Odoo: create, write, unlink, read, search. Tambien otro par de funciones más, pero sinceramente lo básico y con lo que lidiamos todos los días está implementado. Y esta implementado de una forma sencilla de entender. Esa simpleza hace que este módulo sea muy poderoso debido a que es sencillo pero flexible al mismo tiempo. Estaba buscando una solución para trabajar con Odoo y REST, y la verdad es que encontrar este módulo fue una gran noticia. En pocas horas yo ya estaba trabajando con Odoo y REST.

Y sin necesidad de la documentación, solo bastó con leer el código. Pero debido a que no todos tenemos el tiempo para leer código Python, aca sigo con ejemplos sobre como utilizar odoo_api y la librería requests de Python.

Primer ejemplo... como leer y contar registros en Odoo:

#!/usr/bin/python
import requests
import json
# Setea variables, como por ejemplo URL y los parametros de busqueda. Por ejemplo el modelo
headers = {'Content-type': 'application/json'}
url = 'http://odoo11:8069/odoo-api/object/search'
data = {'params': {'model': 'res.partner', 'filters': [], 'keys': {'limit': 2000}, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda (mediante un POST)
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)
res = json.loads(response.content)
for res in res['result']:
        print(res)
# Setea otras variables, como por ejemplo URL para busqueda/lectura y los parametros de busqueda. Por ejemplo el modelo
url = 'http://odoo11:8069/odoo-api/object/search_count'
data = {'params': {'model': 'res.partner', 'filters': ['|',('country_id','=',233),('create_date','>','2021-01-08 00:00:00')], 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda / lectura
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)
res = json.loads(response.content)
print(res['result'])

El segundo ejemplo es sobre como leer datos de los objetos, la operación SEARCH y READ en el ORM de Odoo

#!/usr/bin/python
import requests
import json
# Setea variables, como por ejemplo URL y los parametros de busqueda. Por ejemplo el modelo
headers = {'Content-type': 'application/json'}
url = 'http://odoo11:8069/odoo-api/object/search'
data = {'params': {'model': 'res.partner', 'filters':  ['|',('country_id','=',233),('create_date','>','2021-01-08 00:00:00')], 'keys': {'limit': 2000}, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda (mediante un POST)
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)
res = json.loads(response.content)
for res in res['result']:
        print(type(res),res)
        url_read = 'http://odoo11:8069/odoo-api/object/read'
        data_read = {'params': {'model': 'res.partner', 'ids': [res],  'keys': {'fields': ['name','zip','create_date','country_id']},'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
        resp = requests.post(url_read,data=json.dumps(data_read),headers=headers)
        print(resp.status_code)
        print(resp.content)

El tercer ejemplo es sobre como hacer un write en Odoo.

#!/usr/bin/python
import requests
import json
# Setea variables, como por ejemplo URL y los parametros de busqueda. Por ejemplo el modelo
headers = {'Content-type': 'application/json'}
url = 'http://odoo11:8069/odoo-api/object/search'
data = {'params': {'model': 'res.partner', 'filters':  ['|',('country_id','=',233),('create_date','>','2021-01-08 00:00:00')], 'keys': {'limit': 2000}, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda (mediante un POST)
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)
res = json.loads(response.content)
for res in res['result']:
        print(type(res),res)
        url_read = 'http://odoo11:8069/odoo-api/object/write'
        data_read = {'params': {'model': 'res.partner', 'id': res,  'vals': {'comment': 'This is a test comment'},'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
        resp = requests.post(url_read,data=json.dumps(data_read),headers=headers)
        print(resp.status_code)
        print(resp.content)
        url_read = 'http://odoo11:8069/odoo-api/object/read'
        data_read = {'params': {'model': 'res.partner', 'ids': [res],  'keys': {'fields': ['name','zip','create_date','country_id','comment']},'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
        resp = requests.post(url_read,data=json.dumps(data_read),headers=headers)
        print(resp.status_code)
        print(resp.content)

El cuarto ejemplo es sobre como hacer un create en Odoo.

#!/usr/bin/python
import requests
import json
# Setea variables, como por ejemplo URL y los parametros de busqueda. Por ejemplo el modelo
headers = {'Content-type': 'application/json'}
url = 'http://odoo11:8069/odoo-api/object/create'
vals = {
        'name': 'Jerry Lundegaard',
        'is_company': True,
        'zip': '55403',
        'city': 'Minneapolis'
       }
data = {'params': {'model': 'res.partner', 'vals': vals, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda (mediante un POST)
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)

Y finalmente el quinto ejemplo es sobre como hacer un unlink en Odoo.

#!/usr/bin/python
import requests
import json
# Setea variables, como por ejemplo URL y los parametros de busqueda. Por ejemplo el modelo
headers = {'Content-type': 'application/json'}
url = 'http://odoo11:8069/odoo-api/object/search'
data = {'params': {'model': 'res.partner', 'filters':  [('create_date','>','2021-01-08 00:00:00')], 'keys': {'limit': 2000}, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda (mediante un POST)
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)
res = json.loads(response.content)
for res in res['result']:
        print(type(res),res)
        url_read = 'http://odoo11:8069/odoo-api/object/unlink'
        data_read = {'params': {'model': 'res.partner', 'id': res, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
        resp = requests.post(url_read,data=json.dumps(data_read),headers=headers)
        print(resp.status_code)
        print(resp.content)

 

Acerca de:

Gustavo Orrillo

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.