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,6 +25,9 @@ class PersonCreateView(LoginRequiredMixin, CreateView):
|
||||
form_class = forms.PersonForm
|
||||
|
||||
def form_valid(self, form):
|
||||
try:
|
||||
self.request.user.person
|
||||
except ObjectDoesNotExist:
|
||||
if 'user' in self.request.GET:
|
||||
form.instance.user = self.request.user
|
||||
|
||||
@@ -117,7 +120,9 @@ class ProfileView(LoginRequiredMixin, DetailView):
|
||||
|
||||
except models.Relationship.DoesNotExist:
|
||||
pass
|
||||
except models.Person.DoesNotExist:
|
||||
|
||||
except ObjectDoesNotExist:
|
||||
# No linked Person yet
|
||||
pass
|
||||
|
||||
return context
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
import typing
|
||||
|
||||
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.utils import timezone
|
||||
from django.views.generic import DetailView, RedirectView, UpdateView
|
||||
@@ -44,10 +46,23 @@ class RelationshipCreateView(LoginRequiredMixin, RedirectView):
|
||||
"""
|
||||
def get_redirect_url(self, *args: typing.Any,
|
||||
**kwargs: typing.Any) -> typing.Optional[str]:
|
||||
target = None
|
||||
try:
|
||||
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',
|
||||
kwargs={'pk': relationship.pk})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user