diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py
index 7358a3cd45761d861a60f19dddc0c6f9416bb211..158847661c039e1b4df2a839bd9c3219f26da92f 100644
--- a/ippisite/ippidb/models.py
+++ b/ippisite/ippidb/models.py
@@ -3,21 +3,23 @@ Models used in iPPI-DB
 """
 
 from __future__ import unicode_literals
+
 import operator
+import re
 
-from django.db import models
 from django.conf import settings
-from django.db.models import Max, Min, Count, F, Q, Case, When, Sum
+from django.core.exceptions import ValidationError
+from django.db import models
+from django.db.models import FloatField, IntegerField, BooleanField
+from django.db.models import Max, Count, F, Q, Case, When
 from django.db.models.functions import Cast
-from django.db.models import FloatField, IntegerField, BooleanField                                                                                                                                                                 
-
+from django.utils.translation import ugettext_lazy as _
 
 from .utils import FingerPrinter, smi2inchi, smi2inchikey
 from .ws import get_pubmed_info, get_google_patent_info, get_uniprot_info, get_taxonomy_info, get_go_info, get_pfam_info
 
 
 class AutoFillableModel(models.Model):
-
     """
     AutoFillableModel makes it possible to automatically fill model fields from
     external sources in the autofill() method
@@ -46,6 +48,11 @@ class Bibliography(AutoFillableModel):
         ('PT', 'Patent'),
         ('DO', 'DOI ID')
     )
+    id_source_validators = dict(
+        PM=re.compile("^[0-9]+$"),
+        PT=re.compile("^.*$"),
+        DO=re.compile("^.*$"),
+    )
     source = models.CharField(
         'Bibliographic type', max_length=2, choices=SOURCES, default='PM')
     id_source = models.CharField('Bibliographic ID', max_length=25)
@@ -76,6 +83,16 @@ class Bibliography(AutoFillableModel):
         self.authors_list = info['authors_list']
         self.biblio_year = info['biblio_year']
 
+    def clean(self):
+        super().clean()
+        id_source_validator = self.id_source_validators[self.source]
+        if not id_source_validator.match(self.id_source):
+            raise ValidationError(
+                dict(
+                    id_source=_("Must match pattern %s for this selected source" % id_source_validator.pattern)
+                )
+            )
+
     class Meta:
         verbose_name_plural = "bibliographies"