|
7 | 7 | from django.contrib.auth.mixins import LoginRequiredMixin |
8 | 8 | from django.core import signing |
9 | 9 | from django.core.cache import cache |
10 | | -from django.db import IntegrityError |
| 10 | +from django.db import IntegrityError, transaction |
11 | 11 | from django.core.mail import send_mail |
12 | 12 | from django.http import HttpResponseRedirect |
13 | 13 | from django.shortcuts import render |
@@ -149,11 +149,12 @@ def post(self, request): |
149 | 149 |
|
150 | 150 | for list_id in to_subscribe: |
151 | 151 | try: |
152 | | - UserMailingListSubscription.objects.update_or_create( |
153 | | - user=request.user, |
154 | | - list_id=list_id, |
155 | | - defaults={"email": email, "status": SubscriptionStatus.PENDING}, |
156 | | - ) |
| 152 | + with transaction.atomic(): |
| 153 | + UserMailingListSubscription.objects.update_or_create( |
| 154 | + user=request.user, |
| 155 | + list_id=list_id, |
| 156 | + defaults={"email": email, "status": SubscriptionStatus.PENDING}, |
| 157 | + ) |
157 | 158 | except IntegrityError: |
158 | 159 | errors.append(list_id) |
159 | 160 | continue |
@@ -315,12 +316,13 @@ def _handle_authenticated(self, request, email, list_id, managed_lists): |
315 | 316 | return _prg_redirect(request) |
316 | 317 |
|
317 | 318 | try: |
318 | | - UserMailingListSubscription.objects.create( |
319 | | - user=request.user, |
320 | | - list_id=list_id, |
321 | | - email=email, |
322 | | - status=SubscriptionStatus.PENDING, |
323 | | - ) |
| 319 | + with transaction.atomic(): |
| 320 | + UserMailingListSubscription.objects.create( |
| 321 | + user=request.user, |
| 322 | + list_id=list_id, |
| 323 | + email=email, |
| 324 | + status=SubscriptionStatus.PENDING, |
| 325 | + ) |
324 | 326 | except IntegrityError: |
325 | 327 | if _is_htmx(request): |
326 | 328 | return self._card( |
|
0 commit comments