mirror of
https://github.com/Southampton-RSG/breccia-mapper.git
synced 2026-03-03 03:17:07 +00:00
[FIX] Creating relationships with missing Person objects
When User had no associated Person object, or chosen person_pk did not correlate to an existing Person object, error 500 was thrown
This commit is contained in:
@@ -25,8 +25,11 @@ class PersonCreateView(LoginRequiredMixin, CreateView):
|
|||||||
form_class = forms.PersonForm
|
form_class = forms.PersonForm
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
if 'user' in self.request.GET:
|
try:
|
||||||
form.instance.user = self.request.user
|
self.request.user.person
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
if 'user' in self.request.GET:
|
||||||
|
form.instance.user = self.request.user
|
||||||
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
@@ -117,7 +120,9 @@ class ProfileView(LoginRequiredMixin, DetailView):
|
|||||||
|
|
||||||
except models.Relationship.DoesNotExist:
|
except models.Relationship.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
except models.Person.DoesNotExist:
|
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
# No linked Person yet
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
import typing
|
import typing
|
||||||
|
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from django.shortcuts import redirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.views.generic import DetailView, RedirectView, UpdateView
|
from django.views.generic import DetailView, RedirectView, UpdateView
|
||||||
@@ -44,9 +46,22 @@ class RelationshipCreateView(LoginRequiredMixin, RedirectView):
|
|||||||
"""
|
"""
|
||||||
def get_redirect_url(self, *args: typing.Any,
|
def get_redirect_url(self, *args: typing.Any,
|
||||||
**kwargs: typing.Any) -> typing.Optional[str]:
|
**kwargs: typing.Any) -> typing.Optional[str]:
|
||||||
target = models.Person.objects.get(pk=self.kwargs.get('person_pk'))
|
target = None
|
||||||
relationship, _ = models.Relationship.objects.get_or_create(
|
try:
|
||||||
source=self.request.user.person, target=target)
|
target = models.Person.objects.get(pk=self.kwargs.get('person_pk'))
|
||||||
|
if target is None: raise ObjectDoesNotExist
|
||||||
|
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
# target doesn't exist
|
||||||
|
return reverse('people:person.list')
|
||||||
|
|
||||||
|
try:
|
||||||
|
relationship, _ = models.Relationship.objects.get_or_create(
|
||||||
|
source=self.request.user.person, target=target)
|
||||||
|
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
# User has no linked Person yet
|
||||||
|
return reverse('people:person.create') + '?user'
|
||||||
|
|
||||||
return reverse('people:relationship.update',
|
return reverse('people:relationship.update',
|
||||||
kwargs={'pk': relationship.pk})
|
kwargs={'pk': relationship.pk})
|
||||||
|
|||||||
Reference in New Issue
Block a user