Odoo 20.0 Community · Persistant

project.project : champs, relations et API

Le modèle project.project (« Projet ») est un modèle persistant déclaré par le module Projet, puis enrichi par 12 autres modules. Il expose 143 champs, dont 100 déclarés directement sur le modèle ; 30 champs d'autres modèles pointent vers lui. Retrouvez ci-dessous chaque champ avec son nom technique, son type, son libellé français et ses relations, puis un exemple d'appel à l'API JSON-2 d'Odoo 20.

Fiche d'identité

Nom technique
project.project
Libellé
Projet
Type
Persistant (models.Model)
Table SQL
project_project
Module d'origine
Projet (project)
Étendu par
project_account, sale_project, crm_sale_project, hr_timesheet, project_hr_expense, project_mrp, project_stock, project_purchase, project_sms, sale_project_margin, sale_project_stock, sale_timesheet
Tri par défaut (_order)
sequence, name, id
Hérite de (mixins)
portal.mixinmail.alias.mixinrating.parent.mixinmail.activity.mixinmail.tracking.duration.mixinanalytic.plan.fields.mixin

Champs du modèle

100 champs propres, 37 hérités des mixins et 6 champs automatiques de l'ORM. Cliquez sur un nom pour obtenir le lien direct vers le champ.

143 champs affichés sur 143

Nom techniqueLibelléTypeDétails
access_instruction_messageAccess Instruction Messagechar
calculé
account_idComptemany2one
activeActifboolean
alias_idAlias

E-mail interne associé avec le projet. Les e-mails entrants sont automatiquement synchronisés avec les tâches (ou optionnellement les incidents si le module Suivi des Incidents est installé).

many2one
allocated_hoursTemps allouéfloat

ajouté par Journaux des tâches (hr_timesheet)

allow_billableFacturableboolean

ajouté par Sales - Project (sale_project)

allow_milestonesJalonsboolean
allow_recurring_tasksTâches récurrentesboolean
allow_task_dependenciesDépendances de tâchesboolean
allow_timesheetsFeuilles de tempsboolean
calculé, stocké

ajouté par Journaux des tâches (hr_timesheet)

allowed_internal_user_idsMembres de l'équipemany2many
calculé, stocké
analytic_account_activeActive Accountboolean

related : account_id.active

ajouté par Journaux des tâches (hr_timesheet)

analytic_account_balanceAnalytic Account Balancemonetary

related : account_id.balance

billing_typeType de facturationselection
requiscalculé, stocké

Valeurs : not_billable (non facturable), manually (facturé manuellement)

ajouté par Sales Timesheet (sale_timesheet)

bom_countBom Countinteger
calculé

ajouté par MRP Project (project_mrp)

can_mark_milestone_as_doneCan Mark Milestone As Doneboolean
calculé
closed_task_countClosed Task Countinteger
calculé
collaborator_count# Collaboratorsinteger
calculé
collaborator_idsCollaborateursone2many

inverse : project_id

colorCouleurinteger
company_idSociétémany2one
calculé, stocké
currency_idDevisemany2one
lecture seulecalculé
dateDate d'expiration

Date à laquelle le projet prend fin. Le délai défini sur le projet est pris en compte lors de la visualisation de son planning.

date
date_last_stage_updateDernière mise à jour de l'étapedatetime
date_startDate de débutdate
descriptionDescription

Description pour donner plus d'informations et de contexte sur ce projet

html
display_sales_stat_buttonsDisplay Sales Stat Buttonsboolean
calculé

ajouté par Sales - Project (sale_project)

duration_trackingDuration Trackingjson
effective_hoursTemps passéfloat
calculé

ajouté par Journaux des tâches (hr_timesheet)

encode_uom_in_daysEncode Uom In Daysboolean
calculé

ajouté par Journaux des tâches (hr_timesheet)

estimated_costEstimated Costmonetary
calculé

ajouté par Sales Margins in Projects (sale_project_margin)

estimated_cost_ratioEstimated Cost Ratiofloat
calculé

ajouté par Sales Margins in Projects (sale_project_margin)

favorite_user_idsMembresmany2many
google_map_iframeGoogle Map Iframehtml
calculé
has_any_so_to_invoiceHas SO to Invoiceboolean
calculé

ajouté par Sales - Project (sale_project)

has_any_so_with_nothing_to_invoiceHas a SO with an invoice status of Noboolean
calculé

ajouté par Sales - Project (sale_project)

invoice_countNombre de facturesinteger
calculé

ajouté par Sales - Project (sale_project)

is_favoriteShow Project on Dashboardboolean
calculé
is_internal_projectIs Internal Projectboolean
calculé

ajouté par Journaux des tâches (hr_timesheet)

is_milestone_deadline_exceededIs Milestone Deadline Exceededboolean
calculé
is_milestone_exceededIs Milestone Exceededboolean
calculé
is_project_overtimeProject in Overtimeboolean
calculé

ajouté par Journaux des tâches (hr_timesheet)

is_rottingIs Rottingboolean
is_templateEst un modèleboolean
label_tasksUtiliser les tâches comme

Nom utilisé pour référer aux tâches de votre projet, par ex. tâches, tickets, sprints, etc...

char
traduisible
last_update_colorLast Update Colorinteger
calculé
last_update_idDernière mise à jourmany2one
last_update_statusLast Update Statusselection
requiscalculé, stocké

Valeurs : on_track (En bonne voie), at_risk (En danger), off_track (En retard), on_hold (En attente), to_define (Définir le statut), done (Terminer)

lead_idPistemany2one

ajouté par CRM - Project (crm_sale_project)

milestone_countMilestone Countinteger
calculé
milestone_count_reachedMilestone Count Reachedinteger
calculé
milestone_idsJalonone2many

inverse : project_id

milestone_progressMilestones Reachedinteger
calculé
nameNomchar
requistraduisible
next_milestone_idNext Milestonemany2one
calculé
next_milestone_statusNext Milestone Statuschar
calculé
open_task_countOpen Task Countinteger
calculé
partner_emailPartner Emailchar

related : partner_id.email

partner_idClientmany2one
calculé, stocké
partner_phonePartner Phonechar

related : partner_id.phone

pricing_typeTarif

Le taux de la tâche est parfait si vous souhaitez facturer différents services à différents clients à différents taux. Le taux de l'employé est préférable si vos employés fournissent le même service à un taux différent. Par exemple, des consultants junior et senior fourniraient le même service (= la consultance), mais à des taux différents à cause de leur niveau d'ancienneté.

selection
calculé

Valeurs : task_rate (Taux de la tâche), fixed_rate (Taux du projet), employee_rate (Taux de l'employé)

ajouté par Sales Timesheet (sale_timesheet)

privacy_visibilityVisibilité

Project and task visibility Control who can access this project: • Internal users: choose whether access is limited to team members or available to everyone in your organization. • Portal users: choose whether invited collaborators can access the project. Access levels for portal users • View: can access tasks and send messages. • Edit: can create and update tasks. • Advanced Edit: create and update tasks, change their priority, and move them between stages. Other rules • Internal users can open a task from a direct link, even if they don't have access to the project application. • Project admins have access to private projects, even if they are not team members.

selection
requis

Valeurs : followers (Team members only), invited_users (Team members and invited portal users), employees (Tous les utilisateurs internes), portal (All internal users and invited portal users)

production_countProduction Countinteger
calculé

ajouté par MRP Project (project_mrp)

purchase_orders_count# Purchase Ordersinteger
calculé

ajouté par Project Purchase (project_purchase)

real_costCoût réelmonetary
calculé

ajouté par Sales - Project (sale_project)

real_cost_ratioReal Cost Ratiofloat
calculé

ajouté par Sales - Project (sale_project)

reinvoiced_sale_order_idCommande client

Les produits ajoutés aux transferts de stock, dont le type d'opération est configuré pour générer des coûts analytiques, seront facturés à nouveau dans cette commande client si cela est prévu.

many2one

ajouté par Sales - Project (sale_project)

remaining_hoursTemps restantfloat
calculé

ajouté par Journaux des tâches (hr_timesheet)

resource_calendar_idTemps de travailmany2one
calculé
rotting_daysRotting Daysinteger
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

inverse : project_id

ajouté par Sales Timesheet (sale_timesheet)

sale_line_idArticle de la commande client

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
calculé, stocké

ajouté par Sales - Project (sale_project)

sale_order_amount_totalSale Order Amount Totalmonetary
calculé

ajouté par Sales - Project (sale_project)

sale_order_countNombre de commandes clientsinteger
calculé

ajouté par Sales - Project (sale_project)

sale_order_idCommande clientmany2one

related : sale_line_id.order_id

ajouté par Sales - Project (sale_project)

sale_order_line_countSale Order Line Countinteger
calculé

ajouté par Sales - Project (sale_project)

sale_order_stateSale Order Stateselection

related : sale_order_id.state

ajouté par Sales - Project (sale_project)

sale_warning_textProject Warning

Warning for the partner as set by the user.

text
calculé

ajouté par Sales - Project (sale_project)

sequenceSéquenceinteger
show_ratingsShow Ratingsboolean
calculé
stage_idÉtapemany2one
stat_extra_time_valueStat Extra Time Valuechar
calculé

ajouté par Journaux des tâches (hr_timesheet)

stat_success_rateStat Success Ratefloat
calculé

ajouté par Journaux des tâches (hr_timesheet)

stat_timesheet_valueStat Timesheet Valuechar
calculé

ajouté par Journaux des tâches (hr_timesheet)

tag_idsÉtiquettesmany2many
task_completion_percentageTask Completion Percentagefloat
calculé
task_countTask Countinteger
calculé
task_idsTâchesone2many

inverse : project_id

task_properties_definitionPropriétés de la tâcheproperties_definition
tasksActivités de tâchesone2many

inverse : project_id

timesheet_encode_uom_idTimesheet Encode Uommany2one
calculé

ajouté par Journaux des tâches (hr_timesheet)

timesheet_idsAssociated Timesheetsone2many

inverse : project_id

ajouté par Journaux des tâches (hr_timesheet)

timesheet_product_idProduit de feuille de temps

Service qui sera utilisé par défaut lors de la facturation du temps consacré à une tâche. Il peut être modifié sur chaque tâche individuellement en sélectionnant un article de commande spécifique.

many2one
calculé, stocké

ajouté par Sales Timesheet (sale_timesheet)

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

ajouté par Journaux des tâches (hr_timesheet)

type_idsÉtapes des tâchesmany2many
update_countUpdate Countinteger
calculé
update_idsMettre à jourone2many

inverse : project_id

user_idChef de projetmany2one
vendor_bill_countNombre de factures fournisseursinteger

related : account_id.vendor_bill_count

ajouté par Sales - Project (sale_project)

warning_employee_rateWarning Employee Rateboolean
calculé

ajouté par Sales Timesheet (sale_timesheet)

access_tokenJeton de sécuritéchar

hérité de portal.mixin

access_urlURl d'accès au portail

URl du portail client

char
calculé

hérité de portal.mixin

access_warningAvertissement d'accèstext
calculé

hérité de portal.mixin

activity_calendar_event_idActivité suivante de l'événement du calendriermany2one
calculé

hérité de mail.activity.mixin

activity_date_deadlineDate limite de l'activité à venirdate
lecture seulecalculé

hérité de mail.activity.mixin

activity_exception_decorationIndicateur d’exception d’activité

Type d'activité d'exception enregistrée.

selection
calculé

Valeurs : warning (Alerte), danger (Erreur)

hérité de mail.activity.mixin

activity_exception_iconIcône

Icône pour indiquer une activité d'exception.

char
calculé

hérité de mail.activity.mixin

activity_idsActivitésone2many

inverse : res_id

hérité de mail.activity.mixin

activity_plans_idsPlans d'activitémany2many
calculé

hérité de mail.activity.mixin

activity_stateStatut de l'activité

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

selection
calculé

Valeurs : overdue (En retard), today (Aujourd'hui), planned (Planifié)

hérité de mail.activity.mixin

activity_summaryRésumé de l'activité suivantechar

related : activity_ids.summary

hérité de mail.activity.mixin

activity_type_iconIcône de type d'activitéchar

related : activity_ids.icon

hérité de mail.activity.mixin

activity_type_idType d'activités à venirmany2one

related : activity_ids.activity_type_id

hérité de mail.activity.mixin

activity_user_idUtilisateur responsablemany2one
lecture seulecalculé

hérité de mail.activity.mixin

alias_defaultsAlias Defaultstext

hérité de mail.alias.mixin

alias_domainNom d'alias de domainechar

related : alias_id.alias_domain

hérité de mail.alias.mixin.optional

alias_domain_idAlias de domainemany2one

related : alias_id.alias_domain_id

hérité de mail.alias.mixin.optional

alias_emailAlias de messageriechar
calculé

hérité de mail.alias.mixin.optional

alias_nameNom de l'aliaschar

hérité de mail.alias.mixin

auto_account_idCompte analytiquemany2one
calculé

hérité de analytic.plan.fields.mixin

has_messageA un messageboolean
calculé

hérité de mail.thread

message_attachment_countNombre de pièces jointesinteger
calculé

hérité de mail.thread

message_follower_idsAbonnésone2many

inverse : res_id

hérité de mail.thread

message_has_errorErreur d'envoi du message

Si coché, certains messages ont une erreur de livraison.

boolean
calculé

hérité de mail.thread

message_has_error_counterNombre d'erreurs

Nombre de messages avec des erreurs d'envoi

integer
calculé

hérité de mail.thread

message_has_sms_errorErreur d'envoi SMS

Si coché, certains messages ont une erreur de livraison.

boolean
calculé

hérité de mail.thread

message_idsMessagesone2many

inverse : res_id

hérité de mail.thread

message_is_followerEst un abonnéboolean
calculé

hérité de mail.thread

message_needactionNécessite une action

Si coché, de nouveaux messages demandent votre attention.

boolean
calculé

hérité de mail.thread

message_needaction_counterNombre d'actions

Nombre de messages nécessitant une action

integer
calculé

hérité de mail.thread

message_partner_idsAbonnés (Partenaires)many2many
calculé

hérité de mail.thread

my_activity_date_deadlineÉchéance de mon activitédate
lecture seulecalculé

hérité de mail.activity.mixin

rating_avgÉvaluation moyennefloat
calculé

hérité de rating.parent.mixin

rating_avg_percentageÉvaluation moyenne (%)float
calculé

hérité de rating.parent.mixin

rating_count# Évaluationsinteger
calculé

hérité de rating.parent.mixin

rating_idsÉvaluationsone2many

inverse : parent_res_id

hérité de rating.parent.mixin

rating_percentage_satisfactionÉvaluation de la satisfaction

Pourcentage d'évaluations positives

integer
calculé

hérité de rating.parent.mixin

create_dateCréé ledatetime
lecture seuleautomatique
create_uidCréé parmany2one
lecture seuleautomatique
display_nameNom affichéchar
lecture seulecalculéautomatique
idIDinteger
lecture seuleautomatique
write_dateDernière mise à jour ledatetime
lecture seuleautomatique
write_uidDernière mise à jour parmany2one
lecture seuleautomatique

Relations

Modèles liés depuis ce modèle

Champs d'autres modèles qui pointent ici

Lire ce modèle par l'API

Exemple d'appel à l'API JSON-2 d'Odoo 20 : lecture des cinq premiers enregistrements avec des champs réels du modèle. Remplacez l'instance, la base et la clé API par les vôtres.

curl
curl -X POST "https://votre-instance.odoo.com/json/2/project.project/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: votre-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://votre-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "votre-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())
  • L'accès à l'API externe est réservé à la formule Custom d'Odoo.
  • XML-RPC et JSON-RPC seront retirés dans Odoo 22 (automne 2028) : préférez JSON-2.
  • Les droits d'accès et règles d'enregistrement de l'utilisateur de la clé s'appliquent.

Citer cet outil

Vous rédigez un tutoriel, une documentation interne ou une réponse sur un forum ? Copiez ce lien pour renvoyer vos lecteurs vers la fiche à jour.

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

Sources

Données vérifiées le 25 septembre 2026 · Odoo 20.0 Community

Vous avez un projet Odoo ou souhaitez exploiter votre ERP avec l'IA ? Échangeons

Intégration, développement de modules, connexion de Claude ou ChatGPT à vos données : décrivez-nous votre contexte, nous vous répondons sous 24 heures ouvrées.