Skip to Content

The project.project Model: Understanding Odoo's Project Architecture

A complete guide to Odoo's project model for developers and functional consultants
March 11, 2026 by
The project.project Model: Understanding Odoo's Project Architecture
Dasolo
| No comments yet

Introduction


In Odoo, models define how data is structured and stored in the database. Every piece of business data you work with, from sales orders to projects to tasks, lives in a model.


Understanding Odoo models is essential for both developers and functional consultants. Models are the foundation of the Odoo data architecture. They define Odoo fields, relationships, and business logic. Every model in Odoo follows the same patterns.


This article focuses on one of the most important models in Odoo: project.project. Whether you are building custom modules, integrating external systems, or configuring project workflows, you will work with this model.

What is the project.project Model


The project.project model represents a project in Odoo. It is the container for tasks, milestones, and team collaboration. Every project is a record in this model.


This model in Odoo is used by the Project app. When you create a project in Odoo, you create a project.project record. Tasks are linked to that project through the task_ids field. The project defines the workflow stages, team members, and visibility rules.


The model is defined in the project module. Other modules extend it through Odoo model inheritance. Sale adds project-based billing. Timesheet adds time tracking. Project planning adds Gantt scheduling. Each module adds what it needs without duplicating the core structure.


Understanding the relationship between project.project and project.task is key. The project holds shared settings. The task holds individual work items. Both are central to the Odoo project management workflow.

Key Fields in the Model


Here are the most important Odoo fields in the project.project model. Understanding these will help you work effectively with projects.


1. name

Type: Char. This field stores the name of the project. It is displayed in many Odoo views and is the primary identifier for the project record.


2. create_date

Type: Datetime. Stores the date and time when the record was created. Automatically managed by Odoo. Useful for reporting and auditing.


3. write_date

Type: Datetime. Stores the date and time of the last modification. Also automatically managed. Helps track when data was last updated.


4. active

Type: Boolean. Soft delete flag. When False, the project is archived and hidden from default views. Records are not physically deleted.


5. sequence

Type: Integer. Display order for sorting. Used in project lists and dropdowns. Lower values appear first.


6. color

Type: Integer. Color index for the project. Used in views and kanban boards to visually distinguish projects.


7. user_id

Type: Many2one (res.users). The project manager. This user is responsible for the project and is often shown as the default assignee.


8. company_id

Type: Many2one (res.company). In multi-company setups, this indicates which Odoo company the project belongs to.


9. partner_id

Type: Many2one (res.partner). The customer or client linked to the project. Used for billing and reporting.


10. description

Type: Html. Project description. Can include HTML for formatting. Used for project briefs and notes.


11. date_start

Type: Date. The project start date. Used for planning and reporting.


12. date

Type: Date. The project deadline or end date. Used for tracking and reporting.


13. task_ids

Type: One2many (project.task). The list of tasks in the project. This is the main relation between projects and tasks.


14. task_count

Type: Integer. Number of tasks. Computed from task_ids. Used for display and filtering.


15. type_ids

Type: Many2many (project.task.type). Task stages or types for the project. Defines the workflow (e.g. To Do, In Progress, Done).


16. tag_ids

Type: Many2many (project.tags). Project tags for categorization. Used for filtering and organizing projects.


17. privacy_visibility

Type: Selection. Controls who can access the project. Options: Invited internal users (private), All internal users, or Invited portal users and all internal users (public).


18. collaborator_ids

Type: One2many (project.collaborator). Team members assigned to the project. Defines who can work on the project.


19. favorite_user_ids

Type: Many2many (res.users). Users who marked the project as favorite. Used for quick access in the dashboard.


20. allow_task_dependencies

Type: Boolean. When True, tasks can be linked to other tasks as predecessors or successors. Used for project planning.


21. allow_milestones

Type: Boolean. When True, milestones can be created in the project. Milestones mark key deliverables.


22. milestone_ids

Type: One2many (project.milestone). The milestones in the project. Used for tracking key deliverables.


23. rating_active

Type: Boolean. When True, customers can rate the project. Used for customer feedback.


24. task_properties_definition

Type: Text (JSON). Custom task properties for the project. Defines extra fields that can be added to tasks.


25. access_url

Type: Char. The URL for customers to access the project via the portal. Used for customer collaboration.


26. access_token

Type: Char. Security token for portal access. Ensures only authorized users can view the project.


27. alias_id

Type: Many2one (mail.alias). Email alias for the project. Incoming emails create tasks automatically.


28. activity_ids

Type: One2many (mail.activity). Scheduled activities on the project. Used for follow-ups and reminders.


29. activity_state

Type: Selection. Summary of activity status: Today, Overdue, or Planned. Computed from activity_ids.


30. activity_date_deadline

Type: Date. The date of the next scheduled activity. Used for activity planning.


31. message_ids

Type: One2many (mail.message). Chatter messages on the project. Used for internal communication.


32. message_follower_ids

Type: One2many (mail.followers). Users following the project. They receive notifications.


33. create_uid

Type: Many2one (res.users). The user who created the record. Automatically set by Odoo.


34. write_uid

Type: Many2one (res.users). The user who last modified the record. Automatically set by Odoo.

How This Model Is Used in Business Workflows


1. Project Creation and Management

When a salesperson or project manager creates a project, they set the name, manager, dates, and visibility. The project.project model stores all of this. Tasks are then added and linked to the project.


2. Task Workflow

Tasks move through stages defined by type_ids. The project manager assigns tasks to collaborators. The project holds the workflow configuration and team structure.


3. Customer Portal

When privacy_visibility allows portal access, customers can view tasks and milestones via the access_url. The access_token secures the link. This is useful for client projects.


4. Timesheet and Billing

With the Timesheet module, project.project links to timesheet entries. With Sale, projects can be linked to sales orders for project-based billing. The partner_id field connects the project to the customer.


5. Email Integration

Incoming emails to the project alias create tasks automatically. The alias_id field connects the project to its mail alias. This streamlines task creation from emails.

How Developers Extend This Model


Developers extend project.project using several patterns. Odoo model inheritance is the main mechanism.


Model Inheritance

Use _inherit = 'project.project' to extend the model. This is Odoo model inheritance at work. Add new Odoo fields, override methods, or add constraints. The inherit model in Odoo keeps your changes in a separate module for easy upgrades. When you inherit a model in Odoo, you extend it without modifying the original.


Adding Fields

Define new Odoo fields in your inherited model. Use the right field type: Char, Many2one, Boolean, Integer, Text, Selection. Consider company-dependent fields for multi-company.


Python Extensions

Override create, write, or unlink to add logic. Use super() to call the original. Be careful with computed fields and their dependencies.


Odoo Studio

Odoo Studio lets you add fields without code. Good for quick customizations. For complex logic or upgrades, custom modules are more maintainable.

Best Practices


  • Set user_id for project manager assignment. Clear ownership improves accountability.
  • Configure type_ids for each project. Define stages that match your workflow.
  • Use privacy_visibility correctly. Private projects restrict access to followers and admins.
  • When building API integrations, use the XML-RPC or JSON-RPC API. The project.project model is fully exposed as an API model in Odoo. Map external IDs carefully.
  • For custom fields, use the x_ prefix or a module prefix to avoid conflicts with future Odoo versions.

Common Mistakes


  • Creating tasks without linking them to a project. Every task must have a project_id.
  • Forgetting to set type_ids. New projects may have no stages, so tasks cannot move through workflow.
  • Setting privacy_visibility to public when it should be private. This can expose sensitive data.
  • Overriding core methods without calling super(). This can break other modules or future upgrades.
  • Adding required custom fields without defaults. Existing records will fail validation on upgrade.

Conclusion


The project.project model is central to Odoo project management. It stores project definitions, workflow stages, and team structure. Understanding its fields and how modules extend it will help you configure, customize, and integrate Odoo effectively.


Whether you are a functional consultant setting up projects or a developer building custom modules, a solid grasp of project.project will save time and prevent errors.

Need Help With Your Odoo Implementation ?


Dasolo helps companies implement, customize, and optimize Odoo. We specialize in API integrations and Odoo development. Our team has deep experience with the Odoo data architecture and models like project.project.


If you need help with your Odoo implementation, custom modules, or integrations, we are here to help. Book a demo to discuss your project.

The project.project Model: Understanding Odoo's Project Architecture
Dasolo March 11, 2026
Share this post
Sign in to leave a comment