Odoo 19.0 Community · Persistente

project.project: campos, relaciones y API

El modelo project.project («Proyecto») es un modelo persistente declarado por el módulo Proyecto y ampliado por 13 módulos más. Expone 129 campos, 84 de ellos declarados directamente en el modelo; 26 campos de otros modelos apuntan a él. A continuación encontrará cada campo con su nombre técnico, tipo, etiqueta en español y relaciones, y un ejemplo de llamada a la API JSON-2 de Odoo 19.

Ficha de identidad

Nombre técnico
project.project
Etiqueta
Proyecto
Tipo
Persistente (models.Model)
Tabla SQL
project_project
Módulo de origen
Proyecto (project)
Ampliado por
hr_timesheet, project_account, project_hr_expense, project_mrp, project_mrp_account, sale_project, project_purchase, project_stock, project_sale_expense, project_sms, project_stock_account, sale_project_stock, sale_timesheet
Orden por defecto (_order)
sequence, name, id
Hereda de (mixins)
portal.mixinmail.alias.mixinrating.parent.mixinmail.activity.mixinmail.tracking.duration.mixinanalytic.plan.fields.mixin

Campos del modelo

84 campos propios, 39 heredados de mixins y 6 campos automáticos del ORM. Haga clic en un nombre para obtener el enlace directo al campo.

129 de 129 campos mostrados

Nombre técnicoEtiquetaTipoDetalles
access_instruction_messageAccess Instruction Messagechar
calculado
account_idCuentamany2one
activeActivoboolean
alias_idAlias

Correo electrónico interno asociado con este proyecto. Los mensajes entrantes se sincronizan automáticamente con las Tareas (u opcionalmente con las incidencias si el módulo de seguimiento de incidencias está instalado).

many2one
allocated_hoursTiempo asignadofloat

añadido por Registros de tareas (hr_timesheet)

allow_billableFacturableboolean

añadido por Ventas - Proyecto (sale_project)

allow_milestonesHitosboolean
allow_recurring_tasksTareas recurrentesboolean
allow_task_dependenciesDependencias de tareasboolean
allow_timesheetsPartes de horasboolean
calculado, almacenado

añadido por Registros de tareas (hr_timesheet)

analytic_account_activeActive Accountboolean

related: account_id.active

añadido por Registros de tareas (hr_timesheet)

analytic_account_balanceAnalytic Account Balancemonetary

related: account_id.balance

billing_typeTipo de facturaciónselection
obligatoriocalculado, almacenado

Valores: not_billable (no facturable), manually (facturado manualmente)

añadido por Partes de horas en ventas (sale_timesheet)

bom_countBom Countinteger
calculado

añadido por Proyecto MRP (project_mrp)

can_mark_milestone_as_doneCan Mark Milestone As Doneboolean
calculado
closed_task_countClosed Task Countinteger
calculado
collaborator_count# Collaboratorsinteger
calculado
collaborator_idsColaboradoresone2many

inverso: project_id

colorÍndice de Coloresinteger
company_idCompañíamany2one
calculado, almacenado
currency_idMonedamany2one
solo lecturacalculado
dateFecha de expiración

Fecha en la que termina este proyecto. Se toma en cuenta el calendario definido en el proyecto a la hora de ver su planificación.

date
date_startFecha de iniciodate
descriptionDescripción

Texto de descripción para proporcionar más información y contexto sobre este proyecto

html
display_sales_stat_buttonsDisplay Sales Stat Buttonsboolean
calculado

añadido por Ventas - Proyecto (sale_project)

duration_trackingDuration Trackingjson
effective_hoursTiempo dedicadofloat
calculado

añadido por Registros de tareas (hr_timesheet)

encode_uom_in_daysEncode Uom In Daysboolean
calculado

añadido por Registros de tareas (hr_timesheet)

favorite_user_idsMiembrosmany2many
has_any_so_to_invoiceHas SO to Invoiceboolean
calculado

añadido por Ventas - Proyecto (sale_project)

has_any_so_with_nothing_to_invoiceHas a SO with an invoice status of Noboolean
calculado

añadido por Ventas - Proyecto (sale_project)

invoice_countNúmero de facturasinteger
calculado

añadido por Ventas - Proyecto (sale_project)

is_favoriteShow Project on Dashboardboolean
calculado
is_internal_projectIs Internal Projectboolean
calculado

añadido por Registros de tareas (hr_timesheet)

is_milestone_deadline_exceededIs Milestone Deadline Exceededboolean
calculado
is_milestone_exceededIs Milestone Exceededboolean
calculado
is_project_overtimeProject in Overtimeboolean
calculado

añadido por Registros de tareas (hr_timesheet)

is_templateEs una plantillaboolean
label_tasksUsar tareas como

Nombre utilizado para referirse a las tareas de su proyecto, por ejemplo, tareas, tickets, sprints, etc.

char
traducible
last_update_colorLast Update Colorinteger
calculado
last_update_idÚltima actualizaciónmany2one
last_update_statusLast Update Statusselection
obligatoriocalculado, almacenado

Valores: on_track (A tiempo), at_risk (En riesgo), off_track (Atrasado), on_hold (En espera), to_define (Establecer estado), done (Completado)

milestone_countMilestone Countinteger
calculado
milestone_count_reachedMilestone Count Reachedinteger
calculado
milestone_idsHitoone2many

inverso: project_id

milestone_progressMilestones Reachedinteger
calculado
nameNombrechar
obligatoriotraducible
next_milestone_idNext Milestonemany2one
calculado
open_task_countOpen Task Countinteger
calculado
partner_idClientemany2one
calculado, almacenado
pricing_typePrecio

La tarifa por tarea es perfecta si desea factura con diferentes servicios a diferentes clientes con diferentes tarifas. La tarifa fija es perfecta si factura un servicio a una tarifa fija por hora o día empleado, independientemente del empleado que lo haya realizado. La tarifa por empleado es preferible si sus empleados prestan el mismo servicio a una tarifa diferente. Por ejemplo, los consultores junior y senior prestarían el mismo servicio (= consultoría), pero a una tarifa diferente debido a su nivel de experiencia.

selection
calculado

Valores: task_rate (Tasa de tarea), fixed_rate (Tasa del proyecto), employee_rate (Tarifa de empleado)

añadido por Partes de horas en ventas (sale_timesheet)

privacy_visibilityVisibilidad

Project and Task Visibility: - Invited internal users: Can access only the project or tasks they follow. Assignees automatically get access. - Invited internal and portal users: Same as above, extended to portal users. - All internal users: Full access to the project and all its tasks. - All internal and invited portal users: Internal users get full access. Portal users can access only the project or tasks they follow. Portal Access Levels: - Read-only: Portal users see tasks via their portal but can’t edit them. - Edit (limited): Portal users access kanban/list views and can edit limited fields on followed tasks. - Edit: Same as above, with access to all tasks. Other Rules: - Internal users can open a task from a direct link, even without project access. - Project admins have access to private projects, even if not followers.

selection
obligatorio

Valores: followers (Usuarios internos invitados), invited_users (Usuarios invitados internos y del portal), employees (Todos los usuarios internos), portal (All internal users and invited portal users)

privacy_visibility_warningPrivacy Visibility Warningchar
calculado
production_countProduction Countinteger
calculado

añadido por Proyecto MRP (project_mrp)

purchase_orders_count# Purchase Ordersinteger
calculado

añadido por Compra del proyecto (project_purchase)

reinvoiced_sale_order_idPedido de venta

Los productos añadidos a las preparaciones de stock (con el tipo de operación configurado para generar costes analíticos) serán refacturados en este pedido de venta si están configurados para ello.

many2one

añadido por Ventas - Proyecto (sale_project)

remaining_hoursTiempo restantefloat
calculado

añadido por Registros de tareas (hr_timesheet)

resource_calendar_idHorario de trabajomany2one
calculado
sale_line_employee_idsSale line/Employee map

Sales order item that will be selected by default on the timesheets of the corresponding employee. It bypasses the sales order item defined on the project and the task, and can be modified on each timesheet entry if necessary. In other words, it defines the rate at which an employee's time is billed based on their expertise, skills or experience, for instance. If you would like to bill the same service at a different rate, you need to create two separate sales order items as each sales order item can only have a single unit price at a time. You can also define the hourly company cost of your employees for their timesheets on this project specifically. It will bypass the timesheet cost set on the employee.

one2many

inverso: project_id

añadido por Partes de horas en ventas (sale_timesheet)

sale_line_idElemento del pedido de venta

Sales order item that will be selected by default on the tasks and timesheets of this project, except if the employee set on the timesheets is explicitely linked to another sales order item on the project. It can be modified on each task and timesheet entry individually if necessary.

many2one
calculado, almacenado

añadido por Ventas - Proyecto (sale_project)

sale_order_countNúmero de pedidos de ventainteger
calculado

añadido por Ventas - Proyecto (sale_project)

sale_order_idPedido de ventamany2one

related: sale_line_id.order_id

añadido por Ventas - Proyecto (sale_project)

sale_order_line_countSale Order Line Countinteger
calculado

añadido por Ventas - Proyecto (sale_project)

sale_order_stateSale Order Stateselection

related: sale_order_id.state

añadido por Ventas - Proyecto (sale_project)

sequenceSecuenciainteger
show_ratingsShow Ratingsboolean
calculado
stage_idEtapamany2one
stage_id_colorStage Colorinteger

related: stage_id.color

tag_idsEtiquetasmany2many
task_completion_percentageTask Completion Percentagefloat
calculado
task_countTask Countinteger
calculado
task_idsTareasone2many

inverso: project_id

task_properties_definitionPropiedades de la tareaproperties_definition
tasksActividades de las tareasone2many

inverso: project_id

timesheet_encode_uom_idTimesheet Encode Uommany2one
calculado

añadido por Registros de tareas (hr_timesheet)

timesheet_idsAssociated Timesheetsone2many

inverso: project_id

añadido por Registros de tareas (hr_timesheet)

timesheet_product_idProducto de los partes de horas

Servicio que se utilizará por defecto al facturar el tiempo dedicado a una tarea. Se puede modificar individualmente en cada tarea al seleccionar un elemento específico en el pedido de venta.

many2one
calculado, almacenado

añadido por Partes de horas en ventas (sale_timesheet)

total_timesheet_timeTotal amount of time (in the proper unit) recorded in the project, rounded to the unit.float
calculado

añadido por Registros de tareas (hr_timesheet)

type_idsEtapas de tareasmany2many
update_countUpdate Countinteger
calculado
update_idsActualizarone2many

inverso: project_id

user_idGestor de proyectosmany2one
vendor_bill_countNúmero de facturas de proveedorinteger

related: account_id.vendor_bill_count

añadido por Ventas - Proyecto (sale_project)

warning_employee_rateWarning Employee Rateboolean
calculado

añadido por Partes de horas en ventas (sale_timesheet)

access_tokenToken de seguridadchar

heredado de portal.mixin

access_urlURL de acceso al portal

URL del portal de cliente

char
calculado

heredado de portal.mixin

access_warningAdvertencia de accesotext
calculado

heredado de portal.mixin

activity_calendar_event_idSiguiente evento en el calendario de actividades.many2one
calculado

heredado de mail.activity.mixin

activity_date_deadlineFecha límite de la siguiente actividaddate
solo lecturacalculado

heredado de mail.activity.mixin

activity_exception_decorationDecoración de Actividad de Excepción

Tipo de actividad de excepción en el registro.

selection
calculado

Valores: warning (Alerta), danger (Error)

heredado de mail.activity.mixin

activity_exception_iconIcono

Icono para indicar una actividad de excepción.

char
calculado

heredado de mail.activity.mixin

activity_idsActividadesone2many

inverso: res_id

heredado de mail.activity.mixin

activity_stateEstado de la actividad

Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities.

selection
calculado

Valores: overdue (De retraso), today (Hoy), planned (Planificado)

heredado de mail.activity.mixin

activity_summaryResumen de la siguiente actividadchar

related: activity_ids.summary

heredado de mail.activity.mixin

activity_type_iconIcono de tipo de actividadchar

related: activity_ids.icon

heredado de mail.activity.mixin

activity_type_idTipo de la siguiente actividadmany2one

related: activity_ids.activity_type_id

heredado de mail.activity.mixin

activity_user_idUsuario responsablemany2one
solo lecturacalculado

heredado de mail.activity.mixin

alias_defaultsAlias Defaultstext

heredado de mail.alias.mixin

alias_domainNombre del dominio de aliaschar

related: alias_id.alias_domain

heredado de mail.alias.mixin.optional

alias_domain_idDominio de aliasmany2one

related: alias_id.alias_domain_id

heredado de mail.alias.mixin.optional

alias_emailAlias de correo electrónicochar
calculado

heredado de mail.alias.mixin.optional

alias_nameNombre del aliaschar

heredado de mail.alias.mixin

auto_account_idCuenta analíticamany2one
calculado

heredado de analytic.plan.fields.mixin

has_messageTiene un mensajeboolean
calculado

heredado de mail.thread

is_rottingEn espera/estancadoboolean
calculado

heredado de mail.tracking.duration.mixin

message_attachment_countNúmero de archivos adjuntosinteger
calculado

heredado de mail.thread

message_follower_idsSeguidoresone2many

inverso: res_id

heredado de mail.thread

message_has_errorError de envío de mensaje

Si está marcada, algunos mensajes tienen error de envío.

boolean
calculado

heredado de mail.thread

message_has_error_counterNúmero de errores

Número de mensajes con error de envío

integer
calculado

heredado de mail.thread

message_has_sms_errorError de envío del SMS

Si está marcada, algunos mensajes tienen error de envío.

boolean
calculado

heredado de mail.thread

message_idsMensajesone2many

inverso: res_id

heredado de mail.thread

message_is_followerEs un seguidorboolean
calculado

heredado de mail.thread

message_needactionAcción requerida

Si está marcada, hay nuevos mensajes que requieren su atención.

boolean
calculado

heredado de mail.thread

message_needaction_counterNúmero de acciones

Número de mensajes que requieren una acción

integer
calculado

heredado de mail.thread

message_partner_idsSeguidores (Contactos)many2many
calculado

heredado de mail.thread

my_activity_date_deadlineFecha límite de mi actividaddate
solo lecturacalculado

heredado de mail.activity.mixin

rating_avgCalificación promediofloat
calculado

heredado de rating.parent.mixin

rating_avg_percentageCalificación promedio (%)float
calculado

heredado de rating.parent.mixin

rating_countN.° de calificacionesinteger
calculado

heredado de rating.parent.mixin

rating_idsCalificacionesone2many

inverso: parent_res_id

heredado de rating.parent.mixin

rating_percentage_satisfactionSatisfacción de calificación

Porcentaje de calificaciones positivas

integer
calculado

heredado de rating.parent.mixin

rotting_daysDías en espera

Número de días desde la última actualización de este recurso

integer
calculado

heredado de mail.tracking.duration.mixin

website_message_idsMensajes del sitio web

Historial de comunicación del sitio web

one2many

inverso: res_id

heredado de mail.thread

create_dateCreado eldatetime
solo lecturaautomático
create_uidCreado pormany2one
solo lecturaautomático
display_nameNombre mostradochar
solo lecturacalculadoautomático
idIDinteger
solo lecturaautomático
write_dateÚltima actualización eldatetime
solo lecturaautomático
write_uidÚltima actualización pormany2one
solo lecturaautomático

Relaciones

Modelos enlazados desde este modelo

Campos de otros modelos que apuntan aquí

Leer este modelo por la API

Ejemplo de llamada a la API JSON-2 de Odoo 19: lectura de los cinco primeros registros con campos reales del modelo. Sustituya la instancia, la base y la clave API por las suyas.

curl
curl -X POST "https://su-instancia.odoo.com/json/2/project.project/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: su-base" \
  -H "Content-Type: application/json" \
  -d '{"domain":[],"fields":["name","billing_type","last_update_status","privacy_visibility","account_id"],"limit":5}'
Python (requests)
import requests

BASE_URL = "https://su-instancia.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "su-base"}

res = requests.post(
    f"{BASE_URL}/project.project/search_read",
    headers=headers,
    json={"domain": [], "fields": ["name","billing_type","last_update_status","privacy_visibility","account_id"], "limit": 5},
)
res.raise_for_status()
print(res.json())
  • El acceso a la API externa está reservado al plan Custom de Odoo.
  • XML-RPC y JSON-RPC se retirarán en Odoo 22 (otoño de 2028): use JSON-2.
  • Se aplican los permisos de acceso y las reglas de registro del usuario de la clave.

Citar esta herramienta

¿Escribe un tutorial, una documentación interna o una respuesta en un foro? Copie este enlace para dirigir a sus lectores a la ficha actualizada.

<a href="https://aidoo.ai/es/outils/explorateur-modeles-odoo/project-project">project.project (Odoo 19.0)</a>

Fuentes

Datos verificados el 23 de septiembre de 2026 · Odoo 19.0 Community

¿Tiene un proyecto Odoo o quiere aprovechar su ERP con la IA? Hablemos

Implantación, desarrollo de módulos, conexión de Claude o ChatGPT a sus datos: cuéntenos su contexto y le responderemos en 24 horas laborables.