diff --git a/energy_selfconsumption/models/product.py b/energy_selfconsumption/models/product.py
index 6fd8ae3dc5905a684f9fd6e2e47bc9e73b05a000..53e3119dc653dbdb6bbcb7c995a8ddcf980ebeff 100644
--- a/energy_selfconsumption/models/product.py
+++ b/energy_selfconsumption/models/product.py
@@ -11,3 +11,4 @@ class Product(models.Model):
         string="Energy Project",
         check_company=True,
     )
+    contract_template_id = fields.Many2one("contract.template")
diff --git a/energy_selfconsumption/models/selfconsumption.py b/energy_selfconsumption/models/selfconsumption.py
index 12713e770f620023118287bbc329cb70fdfaf780..8e7aafda9c14f2db366c0d2ab927a1f3abcaea0b 100644
--- a/energy_selfconsumption/models/selfconsumption.py
+++ b/energy_selfconsumption/models/selfconsumption.py
@@ -87,7 +87,11 @@ class Selfconsumption(models.Model):
     contracts_count = fields.Integer(compute=_compute_contract_count)
     invoicing_mode = fields.Selection(INVOICING_VALUES, string="Invoicing Mode")
     product_id = fields.Many2one("product.product", string="Product")
-    contract_template_id = fields.Many2one("contract.template")
+    contract_template_id = fields.Many2one(
+        "contract.template",
+        string="Contract Template",
+        related="product_id.contract_template_id",
+    )
 
     def get_distribution_tables(self):
         self.ensure_one()
diff --git a/energy_selfconsumption/wizards/contract_generation_wizard.py b/energy_selfconsumption/wizards/contract_generation_wizard.py
index 2895b676457e6d6af32a6d57d8864bb73488c6fc..10204acbf12621b99896f111de2ef984304425b3 100644
--- a/energy_selfconsumption/wizards/contract_generation_wizard.py
+++ b/energy_selfconsumption/wizards/contract_generation_wizard.py
@@ -27,7 +27,7 @@ class ContractGenerationWizard(models.TransientModel):
 
         product_id = self.selfconsumption_id.product_id
         formula_contract_id = (
-            self.selfconsumption_id.contract_template_id.contract_line_ids.qty_formula_id
+            self.selfconsumption_id.product_id.contract_template_id.contract_line_ids.qty_formula_id
         )
 
         # Search accounting journal
@@ -86,9 +86,9 @@ class ContractGenerationWizard(models.TransientModel):
                     "company_id": self.env.company.id,
                     "contract_line_ids": contract_lines,
                     "project_id": self.selfconsumption_id.project_id.id,
-                    "contract_template_id": self.selfconsumption_id.contract_template_id.id,
-                    "recurring_interval": self.selfconsumption_id.contract_template_id.recurring_interval,
-                    "recurring_rule_type": self.selfconsumption_id.contract_template_id.recurring_rule_type,
+                    "contract_template_id": self.selfconsumption_id.product_id.contract_template_id.id,
+                    "recurring_interval": self.selfconsumption_id.product_id.contract_template_id.recurring_interval,
+                    "recurring_rule_type": self.selfconsumption_id.product_id.contract_template_id.recurring_rule_type,
                 }
             )