diff --git a/journals/models.py b/journals/models.py index c0747db2a26d169784dd4afc747bec195f08b618..3d4077434d3b50ccbe061b5799ce9bd6bb355419 100644 --- a/journals/models.py +++ b/journals/models.py @@ -4,6 +4,8 @@ from django.template import Template, Context from django.utils import timezone from django.urls import reverse +from .behaviors import doi_journal_validator, doi_volume_validator,\ + doi_issue_validator, doi_publication_validator from .constants import SCIPOST_JOURNALS, SCIPOST_JOURNALS_DOMAINS,\ STATUS_DRAFT, STATUS_PUBLISHED, ISSUE_STATUSES from .helpers import paper_nr_string, journal_name_abbrev_citation @@ -24,7 +26,8 @@ class UnregisteredAuthor(models.Model): class Journal(models.Model): name = models.CharField(max_length=100, choices=SCIPOST_JOURNALS, unique=True) - doi_string = models.CharField(max_length=200, blank=True, unique=True) + doi_string = models.CharField(max_length=200, unique=True, db_index=True, + validators=[doi_journal_validator]) issn = models.CharField(max_length=16, default='2542-4653') active = models.BooleanField(default=True) @@ -43,7 +46,8 @@ class Volume(models.Model): number = models.PositiveSmallIntegerField() start_date = models.DateField(default=timezone.now) until_date = models.DateField(default=timezone.now) - doi_string = models.CharField(max_length=200, blank=True, unique=True) + doi_string = models.CharField(max_length=200, unique=True, db_index=True, + validators=[doi_volume_validator]) class Meta: unique_together = ('number', 'in_journal') @@ -58,7 +62,8 @@ class Issue(models.Model): start_date = models.DateField(default=timezone.now) until_date = models.DateField(default=timezone.now) status = models.CharField(max_length=20, choices=ISSUE_STATUSES, default=STATUS_PUBLISHED) - doi_string = models.CharField(max_length=200, blank=True, unique=True) + doi_string = models.CharField(max_length=200, unique=True, db_index=True, + validators=[doi_issue_validator]) # absolute path on filesystem: (JOURNALS_DIR)/journal/vol/issue/ path = models.CharField(max_length=200) @@ -122,7 +127,8 @@ class Publication(models.Model): metadata = JSONField(default={}, blank=True, null=True) metadata_xml = models.TextField(blank=True, null=True) # for Crossref deposit BiBTeX_entry = models.TextField(blank=True, null=True) - doi_string = models.CharField(max_length=200, blank=True, unique=True) # Used for file name + doi_string = models.CharField(max_length=200, unique=True, db_index=True, + validators=[doi_publication_validator]) submission_date = models.DateField(verbose_name='submission date') acceptance_date = models.DateField(verbose_name='acceptance date') publication_date = models.DateField(verbose_name='publication date')