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.