Siguiendo con REST y Odoo; como leer, actualizar, crear y borrar con odoo_api
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.