diff --git a/castellum/studies/forms.py b/castellum/studies/forms.py
index d5a1d1a6d83dceaf74fc03095d33cdb6c5e53a18..0eb2569a65097202d0d11d665f3b79e2f2fda835 100644
--- a/castellum/studies/forms.py
+++ b/castellum/studies/forms.py
@@ -56,7 +56,6 @@ class StudyForm(forms.ModelForm):
'email',
'description',
'announce_status_changes',
- 'consent',
'min_subject_count',
'exportable_attributes',
'is_anonymous_invitation',
diff --git a/castellum/studies/templates/studies/study_base.html b/castellum/studies/templates/studies/study_base.html
index c04a10b257ffc0345443ed3df1435faadb38c50c..0a8d4f407c51161bd13bba279c32ce672919dbac 100644
--- a/castellum/studies/templates/studies/study_base.html
+++ b/castellum/studies/templates/studies/study_base.html
@@ -127,6 +127,9 @@
{% translate 'Member management' %}
+
+ {% translate 'Consent' %}
+
{% translate 'Pseudonym domains' %}
diff --git a/castellum/studies/templates/studies/study_consent.html b/castellum/studies/templates/studies/study_consent.html
new file mode 100644
index 0000000000000000000000000000000000000000..978d308ede0703e9edb8896169c71b543755b024
--- /dev/null
+++ b/castellum/studies/templates/studies/study_consent.html
@@ -0,0 +1,17 @@
+{% extends "studies/study_base.html" %}
+{% load static i18n django_bootstrap5 utils %}
+
+{% block title %}{% translate "Consent" %} · {{ block.super }}{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/castellum/studies/templates/studies/study_form.html b/castellum/studies/templates/studies/study_form.html
index 1befb9350111358f73fac3fdb2fe80c57d8f30e5..55e05ed6a66a996466432cab860979802408885e 100644
--- a/castellum/studies/templates/studies/study_form.html
+++ b/castellum/studies/templates/studies/study_form.html
@@ -30,7 +30,6 @@
{% bootstrap_field form.exportable_attributes required_css_class='castellum-required' %}
- {% bootstrap_field form.consent required_css_class='castellum-required' %}
{% if CASTELLUM_STUDY_STATUS_NOTIFICATION_TO %}
{% bootstrap_field form.announce_status_changes required_css_class='castellum-required' %}
{% else %}
diff --git a/castellum/studies/urls/__init__.py b/castellum/studies/urls/__init__.py
index 9e54a76ae6f3057d0c015d922919f41781140f61..579bc877c35b7cf82e49071622505a40f3a325db 100644
--- a/castellum/studies/urls/__init__.py
+++ b/castellum/studies/urls/__init__.py
@@ -26,6 +26,7 @@ from ..views.api import APIStudyDetailView
from ..views.api import APIStudyListView
from ..views.recruitment import AnonymousInvitationMailRecruitmentView
from ..views.studies import FilterTrialCreateView
+from ..views.studies import StudyConsentView
from ..views.studies import StudyCreateView
from ..views.studies import StudyDeleteView
from ..views.studies import StudyDetailView
@@ -53,6 +54,7 @@ urlpatterns = [
path('/delete/', StudyDeleteView.as_view(), name='delete'),
path('/domains/', StudyDomainsView.as_view(), name='domains'),
path('/domains/general/', StudyDomainsGeneralView.as_view(), name='domains-general'),
+ path('/consent/', StudyConsentView.as_view(), name='consent'),
path(
'/domains//',
StudyDomainDeleteView.as_view(),
diff --git a/castellum/studies/views/studies.py b/castellum/studies/views/studies.py
index 4a362f30bea1840034fa4a75e4c7a281ad7e4cd5..be0bda0bb69dcfe7f59820690a3fa44d3b11976f 100644
--- a/castellum/studies/views/studies.py
+++ b/castellum/studies/views/studies.py
@@ -469,6 +469,21 @@ class StudyDomainDeleteView(StudyDomainsMixin, DeleteView):
return reverse('studies:domains', args=[self.study.pk])
+class StudyConsentView(PermissionRequiredMixin, UpdateView):
+ model = Study
+ permission_required = 'studies.change_study'
+ template_name = 'studies/study_consent.html'
+ subtab = 'consent'
+ fields = ['consent']
+
+ def get_success_url(self):
+ return reverse('studies:consent', args=[self.object.pk])
+
+ def form_valid(self, form):
+ messages.success(self.request, _('Data has been saved.'))
+ return super().form_valid(form)
+
+
class StudyImportView(PermissionRequiredMixin, FormView):
permission_required = 'studies.change_study'
template_name = 'studies/study_import.html'