From 084221867e3fedaf77fdb68e056e4c58b42ca6b8 Mon Sep 17 00:00:00 2001 From: Anjeel Haria Date: Wed, 29 Apr 2026 17:37:49 +0530 Subject: [PATCH] [FIX] website_membership_registration: Update _check_mail_unique to use sql query instead of search to avoid maximum recursion depth issue --- .../models/res_partner.py | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/website_membership_registration/models/res_partner.py b/website_membership_registration/models/res_partner.py index ce4b1c0..9e74c8e 100644 --- a/website_membership_registration/models/res_partner.py +++ b/website_membership_registration/models/res_partner.py @@ -71,34 +71,40 @@ def _compute_membership_group_ids(self): @api.constrains("email", "membership_state") def _check_mail_unique(self): for partner in self: - if partner.email and partner.membership_state != "none": - member_found = self.search( - [ - ("email", "=ilike", partner.email), - ("id", "!=", partner.id), - ("membership_state", "!=", "none"), - ], - limit=1, - ) - if member_found: - raise ValidationError( - self.env._( - "Another Member already exists with email %s", partner.email - ) + if not partner.email or partner.membership_state == "none": + continue + + # Use a direct SQL query to avoid triggering recursive Odoo search/constrain loops + self.env.cr.execute( + """ + SELECT id FROM res_partner + WHERE email ILIKE %s + AND id != %s + AND membership_state != 'none' + LIMIT 1 + """, + (partner.email, partner.id), + ) + + if self.env.cr.fetchone(): + raise ValidationError( + self.env._( + "Another Member already exists with email %s", partner.email ) - user_found = self.env["res.users"].search( - [ - ("login", "=ilike", partner.email), - ("partner_id", "!=", partner.id), - ], - limit=1, ) - if user_found: - raise ValidationError( - self.env._( - "Another User already exists with email %s", partner.email - ) + user_found = self.env["res.users"].search( + [ + ("login", "=ilike", partner.email), + ("partner_id", "!=", partner.id), + ], + limit=1, + ) + if user_found: + raise ValidationError( + self.env._( + "Another User already exists with email %s", partner.email ) + ) @api.model def cleanup_unverified_members(self):