Mapeo Objeto-Relacional
Un componente clave de Odoo es la capa ORM.Esta capa evita tener que escribir la mayor parte de SQLcon la mano y proporciona servicios de extensibilidad y seguridad.
Los objetos de negocio se declaran como clases de Python que se extienden, loModel
que los integra en el sistema de persistencia automatizado.
Los modelos se pueden configurar estableciendo un número de atributos en su definición.El atributo más importante es el _name que se requiere y define el nombre del modelo en el sistema Odoo.Aquí está una definición mínimamente completa de un modelo:
from odoo import models
class MinimalModel(models.Model):
_name = 'test.model'
Campos del modelo
Los campos se utilizan para definir lo que el modelo puede almacenar y dónde.Los campos se definen como atributos en la clase de modelo:
name = field.Char(required=True)
Atributos comunes
Al igual que el propio modelo, sus campos pueden configurarse, pasando los atributos de configuración como parámetros:
Algunos atributos están disponibles en todos los campos, aquí están los más comunes:
string( unicode, por defecto: nombre del campo)
La etiqueta del campo en la interfaz de usuario (visible por los usuarios).
required( bool, Por defecto: False)
Si True, el campo no puede estar vacío, debe tener un valor predeterminado o siempre se le dará un valor al crear un registro.
help( unicode, Por defecto: '')
Long-form, proporciona una información sobre herramientas de ayuda a los usuarios de la interfaz de usuario.
index( bool, Por defecto: False)
Solicita que Odoo cree un índice de base de datos en la columna.
Campos simples
Existen dos grandes categorías de campos: los campos "simples" que son valores atómicos almacenados directamente en la tabla del modelo y los campos "relacionales" que unen registros (del mismo modelo o de modelos diferentes).
Ejemplo de campos simples son: Boolean
,Date
,Char
.
Campos reservados
Odoo crea algunos campos en todos los modelos1.Estos campos son administrados por el sistema y no deben escribirse en.Pueden ser leídos si es útil o necesario:
id( Id)
El identificador único para un registro en su modelo.
create_date( Datetime)
Fecha de creación del registro.
create_uid( Many2one)
Usuario que creó el registro.
write_date( Datetime)
Fecha de la última modificación del registro.
write_uid( Many2one)
usuario que modificó por última vez el registro.
Campos especiales
De forma predeterminada, Odoo también requiere unname
campo en todos los modelos para diversos comportamientos de visualización y búsqueda.El campo utilizado para estos fines puede ser anulado por la configuración_rec_name
.
Ejercicio----------------------------------------------------------------------------------------
Definir un modelo
Definir un nuevo modelo de datosCurso_en elmódulo_openacademy.Un curso tiene un título y una descripción.Los cursos deben tener un título.
Edite el archivoopenacademy/models/models.py
para incluir una clase de curso.
from odoo import models, fields, api
class Course(models.Model):
_name = 'openacademy.course'
name = fields.Char(string="Title", required=True)
description = fields.Text()
Acciones y menús
Acciones y menús son registros regulares en la base de datos, normalmente declarados a través de archivos de datos.Las acciones pueden ser activadas de tres maneras:
- haciendo clic en los elementos del menú (vinculados a acciones específicas)
- haciendo clic en los botones de las vistas (si están conectados a las acciones)
- como acciones contextuales sobre objetos
Debido a que los menús son algo complejos para declarar hay un<menuitem>
acceso directo para declarar unir.ui.menu
y conectarlo a la acción correspondiente más fácilmente.
<record model="ir.actions.act_window" id="action_list_ideas">
<field name="name">Ideas</field>
<field name="res_model">idea.idea</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_ideas" parent="menu_root" name="Ideas" sequence="10"
action="action_list_ideas"/>
Ejercicio-----------------------------------------------------------------------------------------
Defina nuevas entradas de menú para acceder a cursos bajo la entrada de menú OpenAcademy.Un usuario debe ser capaz de:
- mostrar una lista de todos los cursos
crear / modificar cursos
Crear
openacademy/views/openacademy.xml
con una acción y los menús que activan la acciónAñadir a la
data
lista deopenacademy/__manifest__.py
openacademy / \_manifest\_.py
'data': [
# 'security/ir.model.access.csv',
'templates.xml',
'views/openacademy.xml',
],
# only loaded in demonstration mode
'demo': [
openacademy/views/openacademy.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- window action -->
<!--
The following tag is an action definition for a "window action",
that is an action opening a view or a set of views
-->
<record model="ir.actions.act_window" id="course_list_action">
<field name="name">Courses</field>
<field name="res_model">openacademy.course</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Create the first course
</p>
</field>
</record>
<!-- top level menu: no parent -->
<menuitem id="main_openacademy_menu" name="Open Academy"/>
<!-- A first level in the left side menu is needed
before using action= attribute -->
<menuitem id="openacademy_menu" name="Open Academy"
parent="main_openacademy_menu"/>
<!-- the following menuitem should appear *after*
its parent openacademy_menu and *after* its
action course_list_action -->
<menuitem id="courses_menu" name="Courses" parent="openacademy_menu"
action="course_list_action"/>
<!-- Full id location:
action="openacademy.course_list_action"
It is not required when it is the same module -->
</data>
</odoo>