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
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 technique | Libellé | Type | Détails |
|---|---|---|---|
| access_instruction_message | Access Instruction Message | char | calculé |
| account_id | Compte | many2one | |
| active | Actif | boolean | |
| alias_id | Alias 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_hours | Temps alloué | float | ajouté par Journaux des tâches ( |
| allow_billable | Facturable | boolean | ajouté par Sales - Project ( |
| allow_milestones | Jalons | boolean | |
| allow_recurring_tasks | Tâches récurrentes | boolean | |
| allow_task_dependencies | Dépendances de tâches | boolean | |
| allow_timesheets | Feuilles de temps | boolean | calculé, stocké ajouté par Journaux des tâches ( |
| allowed_internal_user_ids | Membres de l'équipe | many2many | calculé, stocké |
| analytic_account_active | Active Account | boolean | related : ajouté par Journaux des tâches ( |
| analytic_account_balance | Analytic Account Balance | monetary | related : |
| billing_type | Type de facturation | selection | requiscalculé, stocké Valeurs : ajouté par Sales Timesheet ( |
| bom_count | Bom Count | integer | calculé ajouté par MRP Project ( |
| can_mark_milestone_as_done | Can Mark Milestone As Done | boolean | calculé |
| closed_task_count | Closed Task Count | integer | calculé |
| collaborator_count | # Collaborators | integer | calculé |
| collaborator_ids | Collaborateurs | one2many | inverse : |
| color | Couleur | integer | |
| company_id | Société | many2one | calculé, stocké |
| currency_id | Devise | many2one | lecture seulecalculé |
| date | Date 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_update | Dernière mise à jour de l'étape | datetime | |
| date_start | Date de début | date | |
| description | Description Description pour donner plus d'informations et de contexte sur ce projet | html | |
| display_sales_stat_buttons | Display Sales Stat Buttons | boolean | calculé ajouté par Sales - Project ( |
| duration_tracking | Duration Tracking | json | |
| effective_hours | Temps passé | float | calculé ajouté par Journaux des tâches ( |
| encode_uom_in_days | Encode Uom In Days | boolean | calculé ajouté par Journaux des tâches ( |
| estimated_cost | Estimated Cost | monetary | calculé ajouté par Sales Margins in Projects ( |
| estimated_cost_ratio | Estimated Cost Ratio | float | calculé ajouté par Sales Margins in Projects ( |
| favorite_user_ids | Membres | many2many | |
| google_map_iframe | Google Map Iframe | html | calculé |
| has_any_so_to_invoice | Has SO to Invoice | boolean | calculé ajouté par Sales - Project ( |
| has_any_so_with_nothing_to_invoice | Has a SO with an invoice status of No | boolean | calculé ajouté par Sales - Project ( |
| invoice_count | Nombre de factures | integer | calculé ajouté par Sales - Project ( |
| is_favorite | Show Project on Dashboard | boolean | calculé |
| is_internal_project | Is Internal Project | boolean | calculé ajouté par Journaux des tâches ( |
| is_milestone_deadline_exceeded | Is Milestone Deadline Exceeded | boolean | calculé |
| is_milestone_exceeded | Is Milestone Exceeded | boolean | calculé |
| is_project_overtime | Project in Overtime | boolean | calculé ajouté par Journaux des tâches ( |
| is_rotting | Is Rotting | boolean | |
| is_template | Est un modèle | boolean | |
| label_tasks | Utiliser 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_color | Last Update Color | integer | calculé |
| last_update_id | Dernière mise à jour | many2one | |
| last_update_status | Last Update Status | selection | requiscalculé, stocké Valeurs : |
| lead_id | Piste | many2one→ crm.lead | ajouté par CRM - Project ( |
| milestone_count | Milestone Count | integer | calculé |
| milestone_count_reached | Milestone Count Reached | integer | calculé |
| milestone_ids | Jalon | one2many | inverse : |
| milestone_progress | Milestones Reached | integer | calculé |
| name | Nom | char | requistraduisible |
| next_milestone_id | Next Milestone | many2one | calculé |
| next_milestone_status | Next Milestone Status | char | calculé |
| open_task_count | Open Task Count | integer | calculé |
| partner_email | Partner Email | char | related : |
| partner_id | Client | many2one | calculé, stocké |
| partner_phone | Partner Phone | char | related : |
| pricing_type | Tarif 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 : ajouté par Sales Timesheet ( |
| privacy_visibility | Visibilité 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 : |
| production_count | Production Count | integer | calculé ajouté par MRP Project ( |
| purchase_orders_count | # Purchase Orders | integer | calculé ajouté par Project Purchase ( |
| real_cost | Coût réel | monetary | calculé ajouté par Sales - Project ( |
| real_cost_ratio | Real Cost Ratio | float | calculé ajouté par Sales - Project ( |
| reinvoiced_sale_order_id | Commande 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 ( |
| remaining_hours | Temps restant | float | calculé ajouté par Journaux des tâches ( |
| resource_calendar_id | Temps de travail | many2one | calculé |
| rotting_days | Rotting Days | integer | |
| sale_line_employee_ids | Sale 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 : ajouté par Sales Timesheet ( |
| sale_line_id | Article 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_order_amount_total | Sale Order Amount Total | monetary | calculé ajouté par Sales - Project ( |
| sale_order_count | Nombre de commandes clients | integer | calculé ajouté par Sales - Project ( |
| sale_order_id | Commande client | many2one | related : ajouté par Sales - Project ( |
| sale_order_line_count | Sale Order Line Count | integer | calculé ajouté par Sales - Project ( |
| sale_order_state | Sale Order State | selection | related : ajouté par Sales - Project ( |
| sale_warning_text | Project Warning Warning for the partner as set by the user. | text | calculé ajouté par Sales - Project ( |
| sequence | Séquence | integer | |
| show_ratings | Show Ratings | boolean | calculé |
| stage_id | Étape | many2one | |
| stat_extra_time_value | Stat Extra Time Value | char | calculé ajouté par Journaux des tâches ( |
| stat_success_rate | Stat Success Rate | float | calculé ajouté par Journaux des tâches ( |
| stat_timesheet_value | Stat Timesheet Value | char | calculé ajouté par Journaux des tâches ( |
| tag_ids | Étiquettes | many2many | |
| task_completion_percentage | Task Completion Percentage | float | calculé |
| task_count | Task Count | integer | calculé |
| task_ids | Tâches | one2many | inverse : |
| task_properties_definition | Propriétés de la tâche | properties_definition | |
| tasks | Activités de tâches | one2many | inverse : |
| timesheet_encode_uom_id | Timesheet Encode Uom | many2one→ uom.uom | calculé ajouté par Journaux des tâches ( |
| timesheet_ids | Associated Timesheets | one2many | inverse : ajouté par Journaux des tâches ( |
| timesheet_product_id | Produit 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 ( |
| total_timesheet_time | Total amount of time (in the proper unit) recorded in the project, rounded to the unit. | float | calculé ajouté par Journaux des tâches ( |
| type_ids | Étapes des tâches | many2many | |
| update_count | Update Count | integer | calculé |
| update_ids | Mettre à jour | one2many | inverse : |
| user_id | Chef de projet | many2one | |
| vendor_bill_count | Nombre de factures fournisseurs | integer | related : ajouté par Sales - Project ( |
| warning_employee_rate | Warning Employee Rate | boolean | calculé ajouté par Sales Timesheet ( |
| access_token | Jeton de sécurité | char | hérité de portal.mixin |
| access_url | URl d'accès au portail URl du portail client | char | calculé hérité de portal.mixin |
| access_warning | Avertissement d'accès | text | calculé hérité de portal.mixin |
| activity_calendar_event_id | Activité suivante de l'événement du calendrier | many2one | calculé hérité de mail.activity.mixin |
| activity_date_deadline | Date limite de l'activité à venir | date | lecture seulecalculé hérité de mail.activity.mixin |
| activity_exception_decoration | Indicateur d’exception d’activité Type d'activité d'exception enregistrée. | selection | calculé Valeurs : hérité de mail.activity.mixin |
| activity_exception_icon | Icône Icône pour indiquer une activité d'exception. | char | calculé hérité de mail.activity.mixin |
| activity_ids | Activités | one2many | inverse : hérité de mail.activity.mixin |
| activity_plans_ids | Plans d'activité | many2many | calculé hérité de mail.activity.mixin |
| activity_state | Statut de l'activité Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities. | selection | calculé Valeurs : hérité de mail.activity.mixin |
| activity_summary | Résumé de l'activité suivante | char | related : hérité de mail.activity.mixin |
| activity_type_icon | Icône de type d'activité | char | related : hérité de mail.activity.mixin |
| activity_type_id | Type d'activités à venir | many2one | related : hérité de mail.activity.mixin |
| activity_user_id | Utilisateur responsable | many2one | lecture seulecalculé hérité de mail.activity.mixin |
| alias_defaults | Alias Defaults | text | hérité de mail.alias.mixin |
| alias_domain | Nom d'alias de domaine | char | related : hérité de mail.alias.mixin.optional |
| alias_domain_id | Alias de domaine | many2one | related : hérité de mail.alias.mixin.optional |
| alias_email | Alias de messagerie | char | calculé hérité de mail.alias.mixin.optional |
| alias_name | Nom de l'alias | char | hérité de mail.alias.mixin |
| auto_account_id | Compte analytique | many2one | calculé hérité de analytic.plan.fields.mixin |
| has_message | A un message | boolean | calculé hérité de mail.thread |
| message_attachment_count | Nombre de pièces jointes | integer | calculé hérité de mail.thread |
| message_follower_ids | Abonnés | one2many | inverse : hérité de mail.thread |
| message_has_error | Erreur d'envoi du message Si coché, certains messages ont une erreur de livraison. | boolean | calculé hérité de mail.thread |
| message_has_error_counter | Nombre d'erreurs Nombre de messages avec des erreurs d'envoi | integer | calculé hérité de mail.thread |
| message_has_sms_error | Erreur d'envoi SMS Si coché, certains messages ont une erreur de livraison. | boolean | calculé hérité de mail.thread |
| message_ids | Messages | one2many | inverse : hérité de mail.thread |
| message_is_follower | Est un abonné | boolean | calculé hérité de mail.thread |
| message_needaction | Nécessite une action Si coché, de nouveaux messages demandent votre attention. | boolean | calculé hérité de mail.thread |
| message_needaction_counter | Nombre d'actions Nombre de messages nécessitant une action | integer | calculé hérité de mail.thread |
| message_partner_ids | Abonné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 moyenne | float | calculé hérité de rating.parent.mixin |
| rating_avg_percentage | Évaluation moyenne (%) | float | calculé hérité de rating.parent.mixin |
| rating_count | # Évaluations | integer | calculé hérité de rating.parent.mixin |
| rating_ids | Évaluations | one2many | inverse : 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_date | Créé le | datetime | lecture seuleautomatique |
| create_uid | Créé par | many2one | lecture seuleautomatique |
| display_name | Nom affiché | char | lecture seulecalculéautomatique |
| id | ID | integer | lecture seuleautomatique |
| write_date | Dernière mise à jour le | datetime | lecture seuleautomatique |
| write_uid | Dernière mise à jour par | many2one | lecture seuleautomatique |
Relations
Modèles liés depuis ce modèle
- account.analytic.account : account_id
- account.analytic.line : timesheet_ids
- crm.lead : lead_id
- mail.alias : alias_id
- product.product : timesheet_product_id
- project.collaborator : collaborator_ids
- project.milestone : milestone_ids, next_milestone_id
- project.project.stage : stage_id
- project.sale.line.employee.map : sale_line_employee_ids
- project.tags : tag_ids
- project.task : task_ids, tasks
- project.task.type : type_ids
- project.update : last_update_id, update_ids
- res.company : company_id
- res.currency : currency_id
- res.partner : partner_id
- res.users : allowed_internal_user_ids, favorite_user_ids, user_id
- resource.calendar : resource_calendar_id
- sale.order : reinvoiced_sale_order_id, sale_order_id
- sale.order.line : sale_line_id
- uom.uom : timesheet_encode_uom_id
Champs d'autres modèles qui pointent ici
- account.analytic.line : project_id
- mrp.bom : project_id
- mrp.production : project_id
- product.template : project_id, project_template_id
- project.collaborator : project_id
- project.milestone : project_id
- project.sale.line.employee.map : project_id
- project.tags : project_ids
- project.task : project_id
- project.task.burndown.chart.report : project_id
- project.task.stage.report : project_id
- project.task.type : project_ids
- project.task.type.delete.wizard : project_ids
- project.template.create.wizard : template_id
- project.update : project_id
- purchase.order : project_id
- purchase.report : project_id
- report.project.task.user : project_id
- res.company : internal_project_id
- res.config.settings : internal_project_id
- res.users : favorite_project_ids, followed_project_ids
- sale.order : project_id, project_ids
- sale.order.line : project_id
- sale.report : project_id
- stock.picking : project_id
- timesheets.analysis.report : project_id
- withdrawal.request : project_id
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 -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}'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
- Code source du modèle sur GitHub
- Documentation Odoo 20 : ORM API
- Documentation Odoo 20 : API externe JSON-2
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.