From fa0aa71c5c1dc9f914e4e36ff94436972d3a9dd9 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 12 Mar 2025 12:23:04 +0100 Subject: [PATCH] Fix race-condition when creating a customer --- src/pretix/presale/forms/customer.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/pretix/presale/forms/customer.py b/src/pretix/presale/forms/customer.py index 4183d1aa13..99d424b9ae 100644 --- a/src/pretix/presale/forms/customer.py +++ b/src/pretix/presale/forms/customer.py @@ -257,18 +257,21 @@ class RegistrationForm(forms.Form): return self.cleaned_data def create(self): - customer = self.request.organizer.customers.create( + customer, created = self.request.organizer.customers.get_or_create( email=self.cleaned_data['email'], - name_parts=self.cleaned_data['name_parts'], - phone=self.cleaned_data.get('phone'), - is_active=True, - is_verified=False, - locale=get_language_without_region(), + defaults={ + "name_parts":self.cleaned_data['name_parts'], + "phone":self.cleaned_data.get('phone'), + "is_active":True, + "is_verified":False, + "locale":get_language_without_region(), + } ) - customer.set_unusable_password() - customer.save() - customer.log_action('pretix.customer.created', {}) - customer.send_activation_mail() + if created: + customer.set_unusable_password() + customer.save() + customer.log_action('pretix.customer.created', {}) + customer.send_activation_mail() return customer