From ca664c4162b0a726bc93735e95085ee5dc0ac5be Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Mon, 18 Dec 2023 16:49:27 -0600 Subject: [PATCH] =?UTF-8?q?fix:=20don't=20create=20a=20volunteer=20object?= =?UTF-8?q?=20when=20a=20person=20has=20already=20volunt=E2=80=A6=20(#6809?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: don't create a volunteer object when a person has already volunteered * fix: safer create * refactor: use shorthand from django * fix: also protect volunteer from datatracker from race --- ietf/api/views.py | 9 ++++++--- ietf/nomcom/views.py | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ietf/api/views.py b/ietf/api/views.py index e587b3712..73b873f5f 100644 --- a/ietf/api/views.py +++ b/ietf/api/views.py @@ -210,11 +210,14 @@ def api_new_meeting_registration(request): except (NomCom.DoesNotExist, NomCom.MultipleObjectsReturned): nomcom = None if nomcom: - Volunteer.objects.create( + Volunteer.objects.get_or_create( nomcom=nomcom, person=object.person, - affiliation=data['affiliation'], - origin='registration') + defaults={ + "affiliation": data["affiliation"], + "origin": "registration" + } + ) return HttpResponse(response, status=202, content_type='text/plain') else: return HttpResponse(status=405) diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index ce7ca9a82..7705be569 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -1373,7 +1373,7 @@ def volunteer(request): form = VolunteerForm(person=person, data=request.POST) if form.is_valid(): for nc in form.cleaned_data['nomcoms']: - nc.volunteer_set.create(person=person, affiliation=form.cleaned_data['affiliation']) + nc.volunteer_set.get_or_create(person=person, defaults={"affiliation": form.cleaned_data["affiliation"], "origin":"datatracker"}) return redirect('ietf.ietfauth.views.profile') else: form = VolunteerForm(person=person,initial=dict(nomcoms=can_volunteer, affiliation=suggest_affiliation(person)))