-
+
{% icon 'user' %} {{ study.contact_person.get_full_name }}
{% for keyword in study.keyword_set.all %}
{{ keyword }}
diff --git a/study_registration/studies/urls.py b/study_registration/studies/urls.py
index a6d1c905a217525bf6db11910ccd24ebd641ec71..46dce1ba533425dcfa315f56759171c2b75b74e1 100644
--- a/study_registration/studies/urls.py
+++ b/study_registration/studies/urls.py
@@ -13,8 +13,8 @@ urlpatterns = [
path('', StudyListView.as_view(), name='list'),
path('mine/', MyStudiesView.as_view(), name='mine'),
path('new/', StudyCreateView.as_view(), name='create'),
- path('
/', StudyDetailView.as_view(), name='detail'),
- path('.json', StudyApiView.as_view(), name='api'),
- path('/update/', StudyUpdateView.as_view(), name='update'),
- path('/delete/', StudyDeleteView.as_view(), name='delete'),
+ path('-/', StudyDetailView.as_view(), name='detail'),
+ path('-.json', StudyApiView.as_view(), name='api'),
+ path('-/update/', StudyUpdateView.as_view(), name='update'),
+ path('-/delete/', StudyDeleteView.as_view(), name='delete'),
]
diff --git a/study_registration/studies/views.py b/study_registration/studies/views.py
index bb2a4a1a4ddba013575f391a6d05c4d38e03ad77..5f5823d228e57e01a98bb52106d2d8815f151f05 100644
--- a/study_registration/studies/views.py
+++ b/study_registration/studies/views.py
@@ -12,6 +12,7 @@ from django.views.generic import UpdateView
from .forms import StudyForm
from .models import Study
+from .mixins import redirect_to_correct_study_id
def split_with_quotes(s):
@@ -109,6 +110,12 @@ class MyStudiesView(LoginRequiredMixin, RedirectView):
class StudyDetailView(DetailView):
model = Study
+ def dispatch(self, request, **kwargs):
+ study = super().get_object()
+ if study.short_title != self.kwargs['short']:
+ return redirect_to_correct_study_id(self.request, study)
+ return super().dispatch(request, **kwargs)
+
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['is_owner'] = (
@@ -149,6 +156,12 @@ class StudyUpdateView(OwnerRequiredMixin, UpdateView):
model = Study
form_class = StudyForm
+ def dispatch(self, request, **kwargs):
+ study = super().get_object()
+ if study.short_title != self.kwargs['short']:
+ return redirect_to_correct_study_id(self.request, study)
+ return super().dispatch(request, **kwargs)
+
def get_success_url(self):
return reverse('studies:detail', args=[self.object.pk])
@@ -156,5 +169,11 @@ class StudyUpdateView(OwnerRequiredMixin, UpdateView):
class StudyDeleteView(OwnerRequiredMixin, DeleteView):
model = Study
+ def dispatch(self, request, **kwargs):
+ study = super().get_object()
+ if study.short_title != self.kwargs['short']:
+ return redirect_to_correct_study_id(self.request, study)
+ return super().dispatch(request, **kwargs)
+
def get_success_url(self):
return reverse('studies:list')
diff --git a/study_registration/templates/base.html b/study_registration/templates/base.html
index 92e37a4b1a469c26409dba14bf1f2ce661ac0df9..c0320db5ae68106dcd74c99d437ec8e4fac70711 100644
--- a/study_registration/templates/base.html
+++ b/study_registration/templates/base.html
@@ -41,7 +41,7 @@
{% block breadcrumbs %}
- {% translate 'Studies' %}
- - {{ study }}
+ - {{ study }}
{% endblock %}
diff --git a/study_registration/urls.py b/study_registration/urls.py
index 655f19aa91e141d07f606d96b4e3877f44aa54d5..446d8938fd265c18ff844aafec2fd52f20254237 100644
--- a/study_registration/urls.py
+++ b/study_registration/urls.py
@@ -20,23 +20,23 @@ urlpatterns = [
template_name='bootstrap_theme.css', content_type='text/css'
), name='bootstrap-theme'),
path(
- 'studies/