diff --git a/commentaries/forms.py b/commentaries/forms.py
index 660d8d74ff21abf19c1fbd24dbe515980fc0e906..5fd67a38dba9217f7bd873f6a1435ccff4e49a46 100644
--- a/commentaries/forms.py
+++ b/commentaries/forms.py
@@ -9,6 +9,8 @@ from .models import Commentary
 from scipost.services import DOICaller
 from scipost.models import Contributor
 
+def commentary_exists(input_doi):
+    return Commentary.objects.filter(pub_DOI=input_doi).exists()
 
 class DOIToQueryForm(forms.Form):
     VALID_DOI_REGEXP = r'^(?i)10.\d{4,9}/[-._;()/:A-Z0-9]+$'
@@ -18,7 +20,7 @@ class DOIToQueryForm(forms.Form):
     def clean_doi(self):
         input_doi = self.cleaned_data['doi']
 
-        if self.commentary_exists(input_doi):
+        if commentary_exists(input_doi):
             error_message = 'There already exists a Commentary Page on this publication.'
             raise forms.ValidationError(error_message)
 
@@ -31,11 +33,9 @@ class DOIToQueryForm(forms.Form):
 
         return input_doi
 
-    def commentary_exists(self, input_doi):
-        return Commentary.objects.filter(pub_DOI=input_doi).exists()
 
     def request_published_article_form_prefill_data(self):
-        additional_form_data = {'type': 'published', 'pub_DOI': self.cleaned_data['doi']}
+        additional_form_data = {'pub_DOI': self.cleaned_data['doi']}
         return {**self.crossref_data, **additional_form_data}
 
 
@@ -84,6 +84,22 @@ class RequestPublishedArticleForm(forms.ModelForm):
             'pub_date': 'Format: YYYY-MM-DD',
         }
 
+
+    def __init__(self, *args, **kwargs):
+        super(RequestPublishedArticleForm, self).__init__(*args, **kwargs)
+        # We want pub_DOI to be a required field.
+        # Since it can be blank on the model, we have to override this property here.
+        self.fields['pub_DOI'].required = True
+
+    def clean_pub_DOI(self):
+        input_doi = self.cleaned_data['pub_DOI']
+
+        if commentary_exists(input_doi):
+            error_message = 'There already exists a Commentary Page on this publication.'
+            raise forms.ValidationError(error_message)
+
+        return input_doi
+
     def save(self, *args):
         commentary = super().save(*args)
         commentary.metadata = self.metadata
diff --git a/commentaries/test_forms.py b/commentaries/test_forms.py
index b225d21805268d12371d88fd475c3e111c30da05..9e9d4a483e1a487dab9db2e072c2afe47e223cde 100644
--- a/commentaries/test_forms.py
+++ b/commentaries/test_forms.py
@@ -6,7 +6,7 @@ from common.helpers import model_form_data
 from scipost.factories import UserFactory
 
 from .factories import VettedCommentaryFactory, UnvettedCommentaryFactory
-from .forms import RequestCommentaryForm, VetCommentaryForm, DOIToQueryForm
+from .forms import RequestCommentaryForm, RequestPublishedArticleForm, VetCommentaryForm, DOIToQueryForm
 from .models import Commentary
 from common.helpers.test import add_groups_and_permissions
 
@@ -111,6 +111,32 @@ class TestVetCommentaryForm(TestCase):
         self.assertRaises(ValueError, form.process_commentary)
 
 
+class TestRequestPublishedArticleForm(TestCase):
+    def setUp(self):
+        add_groups_and_permissions()
+        factory_instance = UnvettedCommentaryFactory.build()
+        self.user = UserFactory()
+        self.valid_form_data = model_form_data(factory_instance, RequestPublishedArticleForm)
+
+    def test_valid_data_is_valid(self):
+        """Test valid form for DOI"""
+        form = RequestPublishedArticleForm(self.valid_form_data)
+        self.assertTrue(form.is_valid())
+
+    def test_doi_that_already_has_commentary_page_is_invalid(self):
+        unvetted_commentary = UnvettedCommentaryFactory()
+        invalid_data = {**self.valid_form_data, **{'pub_DOI': unvetted_commentary.pub_DOI}}
+        form = RequestPublishedArticleForm(invalid_data)
+        self.assertEqual(form.is_valid(), False)
+        error_message = form.errors['pub_DOI'][0]
+        self.assertRegexpMatches(error_message, re.compile('already exist'))
+
+    def test_commentary_without_pub_DOI_is_invalid(self):
+        invalid_data = {**self.valid_form_data, **{'pub_DOI': ''}}
+        form = RequestPublishedArticleForm(invalid_data)
+        self.assertEqual(form.is_valid(), False)
+
+
 class TestRequestCommentaryForm(TestCase):
     def setUp(self):
         add_groups_and_permissions()